Sunday, September 28, 2008

Overview of Web Service Stacks

There are currently the following open-source Java Web Service stacks in the market today.There could be more that I am unaware of, but at least the following contribute more significantly to the market share.
  1. Apache Axis1 and Apache Axis2
  2. Apache CXF
  3. Spring-WS
  4. Sun’s Metro available via Java EE 5 GlassFish container
  5. JbossWS
  6. XFire - which is now merged and transformed to being CXF.
This article is a comparative interview with each of the web service stack’s Principal Engineers and their vision for their product. http://www.infoq.com/articles/os-ws-stacks-background The second article is a comparison between Apache’s 3 products – Axis1, Axis2 and CXF. http://www.theserverside.com/tt/articles/article.tss?l=AxisAxis2andCXF Both of these articles are non-biased articles with no claims of one being better than the other. They leave it up to users to pick the one most matching their needs and demands. Sun has now published the standards for Web Services and it has now become imperative for all the Web Service stacks to provide implementations of those for conformance. Every web service stack provides the core functionality of:
  1. Providing an easy-to-use deployment option. 
  2. Correct Web service/operation invocation for the particular message(SOAP/REST). This further involves in the following order -
  • Receiving the message over the correct transport endpoint(Endpoint is an abstraction to represent URL and port),
  • Figure out the operation intended to perform based on the message, and then
  • Invoke the correct Java method mapping to the operation.
    3.  Pre-processing the messages via handlers to perform various functions like authentication, logging, custom processing etc.
    4. Marshaling/Unmarshaling mechanism of the request and response structures to/from Java<=>XML.
   5.  In addition, today's web service stacks are expected to provide implementations for the various WS-* standards that exist.

With respect to points # 2 and # 4 above, Mark Hansen has correctly pointed out:
The key technology for efficient SOA is efficient and accurate Java/XML mapping or more generically known as the OXM (Object-XML Mapping)as pointed out by Spring-WS. At the SOA level, system standards are specified using platform independent XML messages (SOAP/REST) and WSDL operations (which themselves are in XML). But at the language level (Java/C#/VB etc), the systems that are the real engines behind the functionality of SOA are implemented using objects and methods. The more seamless effortless and accurate OXM solution that a web service engine provides the more popular it will be.

4 comments:

Byju Joy said...

This effort towards standardization (and potentially 'simplification') of Web Services implementation is great step towards bringing Java based enterprise application development to simplicity levels of Visual Basic.

Unknown said...

So which do you prefer so far? I am sure that would depend on what project you were using them for. But lets say you were creating webservices to replace database access entirely for a front-end application. Or if you were using webservices to provide a transactional service.

Craig MacKay said...

You should add Jersey to your list

Nandhu Sriram said...

I really like CXF with JSON as data exchange format, it really rocks