Daily Archives: August 19, 2013

Web Service Framework Comparison – 2013 – Part II

As promised here is my Part II of the blog. You can find Part I of the blog in here. Also my chapter on Spring WS in my Spring book in here.

The Blog is still under construction but i would like to publish it and then keep on updating with more content. Apologies for incomplete blog post.

Apache CXF

The project is a merger between two open source projects namely Celtix developed by IONA technologies and XFire developed by Codehaus. As you would have already figure why the name CXF – Celtix XFire. Rather than me plagiarizing, I would suggest reading the Wikipedia for more details http://en.wikipedia.org/wiki/Apache_CXF.

Some of the advantages associated with Apache CXF is as follows:-

  • Good cohesive support for the Spring Framework.
  • Good OSGi support (How much this is a valid constraint for the evaluation is questionable, i agree).
  • Good support for more strong web service functionalities like WS-Security, WS-Policy etc. to name a few.
  • It also has a compliant JAX-RS implementation allowing it to expose web service as REST and SOAP based.
  • It also has W3C compliant SOAP/JMS implementation if they are required.
  • Much easier to use and implement.
  • Less verbose when it generates basic classes for WS/WS-Client from the WSDL.
  • More “standards based” API’s. The API’s are slim and trim with good performance and ease of use.
  • Considered more “embeddable” as opposed to other WS frameworks, especially with the Spring Framework.
  • CXF provides support for code first and contract first development, and provides ability to plug-in various flexible binding mechanisms.
  • The front end programming API’s is spectated from the core code making it really flexible.

Some of the disadvantages associated with Apache CXF is as follows:-

  • Doesn’t support Orchestration and WS transactions yet (I really don’t know how relevant this is, i plagiarized it from Ankur Kumar blog, refer reference section of this blog post. As he is well-versed with WS, i think i should believe him. Might be Daniel Kulp will help me with this.)
  • WSDL 2.0 support is not yet there.
  • Again, CXF is very good with SOAP, so for web services based on REST, due to its very good support for SOAP, CXF brings in added weight and complexity (I am expecting Daniel Kulp to help on this as well)

Apache Axis2

As explained earlier is a completely re-written version of the famous Apache Axis SOAP stack. While doing so it has to some extend looked upon various lessons learnt and corrected it. Some of the advantages of using Axis2 are as detailed below:-

  • Good support for more strong web service functionalities like WS-Security, WS-Policy etc. to name a few.
  • Good integration support for binding frameworks like XMLBeans, making it suitable for creating web services having complex schema definitions.
  • Somewhat better integration support with the Spring Framework. More details can be found at http://axis.apache.org/axis2/java/core/docs/spring.html.
  • Considering performance aspects, it performs a bit faster compared to Apache Axis2 due to use of proprietary API’s.
  • Supports bothe Contract-First and Contract-Last approach, which gives good flexibility and choice to the users. This is key to some extend.

Some of the disadvantages attributed to Axis2 are as detailed below:-

  • Lack of cohesive support with JAX-WS. the support is detailed in the following URL: http://axis.apache.org/axis2/java/core/docs/jaxws-guide.html.
  • Again good cohesive support between Axis2 and Spring Framework as opposed to other WS frameworks.
  • Good amount of classes, a bit hard to understand and difficult to refactor in case if it is required.
  • Churns out more proprietary API’s and you as a developer would have to handle these.
  • Quick turnaround with fixes and releases. You could read Part I of this blog which compared these aspects in detail.
  • Slowly Apache is phasing out Axis2 in favour of Apache CXF (Please dont quote me on this, but this is slowly happening)
  • It’s a web application by its own with all the services deployed in WEB-INF/services folder as AAR (Axis 2 Archives). This structure as a whole can be problematic while deploying, maintaining, upgrading, versioning and testing to a greater extend.

Spring WS

Some of the advantages associated with Spring WS is as follows:-

  • Full support of the Spring programming model and this can be a very good advantage to take this framework on. The Spring Framework is leading the Java web framework race, now almost single handedly and this advantage is key according to me.
  • Clean API’s (same as above because Spring having clean API’s has influenced this to a larger extend)
  • Clean mapping of the incoming SOAP messages to the methods
  • If your web application framework is based on Spring MVC, Spring WS gives easy and clean mixing between WS endpoints and Spring MVC’s controllers. Also coding of endpoints is as easy as coding a new controller in Spring MVC.
  • Easy unit/integration testing capabilities.
  • Support for different XML marshallers.
  • No generated code/deployment descriptors.

Some of the disadvantages associated with Spring WS is as follows:-

  • Supports only Contract-First approach, which could result in lack of flexibility to the users.
  • Most of WS-* support might be questionable. By the way how much of WS-* things we use?

Technologies grow faster and with open community development, issues identified gets fixed quickly. Having said that, there is an article which i would like to share; http://www.ibm.com/developerworks/java/library/j-jws19/index.html; which rates Apache CXF more as compared with Apache Axis2 in security aspects. Many issues identified would have got corrected over the period of 3 years, but its worth noting these.

Although my comparison is not that well structured, i found a blog released on the same day as i was typing mine, which details the set of criteria which should be used for evaluating the web service frameworks. If i have to do this extensive comparison, it would take me at least 3 months. Since i don’t have much time at this point, i still don’t want the reader not to see these evaluation criteria, which is well structured and though through:

http://naveenbalani.com/index.php/2010/05/evaluating-web-service-frameworks/

Things which I think (Purely my own)

  • For almost 80% of the projects the capabilities required can be covered in a good way by using either Apache CXF or Apache Axis2. If already you application is based on Spring Framework, I would suggest using Apache CXF along with Spring Framework OR using Spring WS with use of CXF as the web service engine.
  • Spring WS similar to the Spring programming model has good and clean API’s, making it easy for developers (juniors) to code web services in Spring WS fast and easy. If you would like more standards, i think Apache CXF is a good choice over Apache Axis2. Again Apache Axis2 is slowly getting itself eaten up by Apache CXF. Fro an enterprise application point of view longevity and community support id required and here CXF scores well compared to Axis2.

Spring WS > Apache CXF > Apache Axis2

I cannot really say that Spring WS is above Apache CXF, because they are very very good fraewmorks. According to your application requirement, i would suggest using either Spring WS or Apache CXF.

Finally to finish off the blog, i would again like to share a picture, which gives Google Search Trends for these Web Service Frameworks in the year 2013 – WorldWide. How much it gives an edge to Apache CXF is questionable, nevertheless gives an indication as to what people are looking for in Google with regards to these frameworks and which is more active.

GoogleTrendsWSFrameworks

There is a beautiful page maintained in Apache which compares the various WS frameworks as a whole. The page is edit last in the year 2011, but I felt the page is a good share in my blog (note Spring WS is missing in the list because it is not an Apache project).

http://wiki.apache.org/ws/StackComparison

References

Page Visitors: 6961