Over a million developers have joined DZone.

Implementing Simple Web Services Registry Using CXF

· Integration Zone

Learn how API management supports better integration in Achieving Enterprise Agility with Microservices and API Management, brought to you in partnership with 3scale

UDDI is an enterprise-grade solution for Web Services Directory. Most of Java EE application servers are shipped with UDDI applications. I wrote about UDDI and JAXR previously: Preparing for SCDJWS Part 8: UDDI, Fixing jUDDI 0.9rc4 and Scout 1.2 bugs, and Preparing for SCDJWS Part 15: JAXR and Web Services Registries.

Today I will show you a more flyweight approach to Web Services Registry. I will use Apache CXF for it.

Bean configuration

Let's start with beans.xml configuration:
<bean id="RegistryServiceBean" class="pl.gda.pg.eti.nuntius.testcases.orders_local_business_process_services.registry.RegistryServiceImpl " />
<jaxws:endpoint 
   id="RegistryService" 
   implementor="#RegistryServiceBean" 
   address="/Registry" />
:) Simple isn't it?

The implementation

Assume our registry service expects namespace and portType arguments, and returns a list of W3CEndpointReference (WS-Addressing) endpoints:
@WebService(name = "Registry", serviceName = "RegistryService")
public class RegistryServiceImpl implements ApplicationContextAware {

 private ServletTransportFactory servletTransportFactory;

 public List<W3CEndpointReference> findWebServices(
   @WebParam(name = "namespace") String namespace,
   @WebParam(name = "portType") String portType) {

  QName portTypeQName = new QName(namespace, portType);

  List<W3CEndpointReference> endpointReferences = new ArrayList<W3CEndpointReference>();

  for (ServletDestination servletDestination : servletTransportFactory
    .getDestinations()) {
   EndpointInfo endpointInfo = servletDestination.getEndpointInfo();
   if (portTypeQName.equals(endpointInfo.getInterface().getName())) {
    String address = endpointInfo.getAddress();
    W3CEndpointReference endpointReference = new W3CEndpointReferenceBuilder()
      .address(address).build();
    endpointReferences.add(endpointReference);
   }
  }

  return endpointReferences;
 }

 @Override
 @WebMethod(exclude = true)
 public void setApplicationContext(ApplicationContext applicationContext)
   throws BeansException {
  servletTransportFactory = (ServletTransportFactory) applicationContext
    .getBean(ServletTransportFactory.class.getCanonicalName());
 }

}
Summary

I think no comments are required, but if you have any questions give me a shout.

cheers,
Łukasz

Unleash the power of your APIs with future-proof API management - Create your account and start your free trial today, brought to you in partnership with 3scale.

Topics:

Published at DZone with permission of Łukasz Budnik , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}