Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Implementing Simple Web Services Registry Using CXF

DZone's Guide to

Implementing Simple Web Services Registry Using CXF

· Integration Zone ·
Free Resource

The State of API Integration 2018: Get Cloud Elements’ report for the most comprehensive breakdown of the API integration industry’s past, present, and future.

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

Your API is not enough. Learn why (and how) leading SaaS providers are turning their products into platforms with API integration in the ebook, Build Platforms, Not Products from Cloud Elements.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}