A lot of Java Developers out there sees task with Web Service implementation daunting – well, nobody can blame them really, especially that it brings a lot of complexity in development and design over the years of enterprise application development. For some though, learning it is somehow the next step in building a full blown enterprise application – Web Services – is one of the key schemes for implementing service oriented design – almost every platform available has support to the scheme, and that of course includes Java/J2EE.
In this tutorial, I will show how you will using Apache CXF to create Web Servies using JAX-WS and the Apache CXF API to call specific service from a remote application.
- Building the Web Service Application : Server Side – We need to build the application as well as the Web Services implementation code. This will be a generic WAR (Web Archive) that will house the actual implementation
- Building the Web Service Application: Client Side – Of course, we need to provide external clients a way for them to access the services – we will create a stub and give them out to clients for them to use the services.
FYI: I’m using Maven to simplify library definitions.
1st we create the Stub
this houses the interface and entities (Pojos) used to access the service. When you design your service – you usually create the class interfaces (reference) first and put it on another JAR file for re-distribution.
2nd lets build the service.
We will be hosting the service from a Web Archive deployed to an application server.
POM. xml - We will be using Spring CDI and CXF – Might as well load up all the libraries needed.
We include the stub on the server as this will act as the reference of our implementation:
We now create the Service Implementation:
cxf-servlet (or beans.xml) – this is where we will call the factory that will publish the WSDL upon loading the context.
web.xml – we need to make sure that web service request will go thru CXF – since we are using its framework. Good thing about CXF is it does all the necessary binding, marshalling, unmarshalling as well as injecting the in / out interceptors.
Build and Deploy the WAR! – After deploying the war, view the context page. You should be seeing something like this:
If you manage to view the above URL – then you have successfully expose your service and can now be called by external clients
3rd we create the client app.
Now we create a standalone Java app to call the service – we will be using Spring again to context load client beans and we need include the stub so that we can have reference to the implementation.
beans.xml – create the xml and call the proxy factory bean to create the instance on runtime
Create the Client – We will now call the bean and use the reference to call the method.
4th Test! – Test your service!
You should now be able call the Service implementation!
Download the example here
With this simple example, its really a conclusive proof that creating Web Service now is just a breeze – We took advantage of Apache CXF as a service framework to simplify the development and Springs powerful CDI that almost took care the rest.