Summary
Arun Gupta published an overview of seven Java-oriented Web service stacks. He compares the Web service stacks on fifty-two points, including the standards and protocols each stack supports, as well as IDE support.
Advertisement
At bottom, Web services are but a loosely related set of standards, protocols, specifications, and even best practices, all with the alleged aim to facilitate XML-based distributed computing. You almost certainly need to cobble together implementations of several Web service standards to write a Web service application that actually does something useful.
In the past few years, several Web service stacks emerged to integrate implementations of standards that address everything from data binding, network transport, XML encoding, security, communication protocols, and IDE support. Arun Gupta, an engineer with Sun's Web services team, recently put together a comparison of seven major Web service stacks in a blog post, Web Services Stack Comparison (the actual comparison matrix is found here: StackComparison).
The frameworks he compares are:
Apache Axis 1.x
Apache Axis2
Celtix
Glue
JBossWS
XFire (1.2)
GlassFish
All but one of the frameworks—Glue—are open-source. The last Web service listed, GlassFish, is the Sun-sponsored Java EE 5 application server, which is also the Java EE 5 reference implementation, and Gupta seems most familiar with that. His comparison shows that GlassFish supports by far the most features and standards, with the notable exception of XML data binding, where GlassFish only supports JAXB. GlasshFish also supports some higher-level APIs business may care about, such as the Java Business Integration API (JSR 208).
Another interesting conclusion from Gupta's chart is that Axis 2, Apache's completely re-worked Web service framework, stacks up nicely against GlassFish, providing support not only for three XML data binding techniques, but also for Spring and WS-Eventing, something that GlassFish does not provide.
It's easy to get lost in the Web services acronym soup, and not everyone will need all the fifty-two features in Gupta's chart. Given so many feature-rich alternatives, what Web services framework have you found the easiest to work with?
These bullet-point feature lists are interesting, but don't generally give a good idea of what the web service stacks are actually like to use.
Of the stacks on the list, I've used Axis 2 and XFire recently, Axis 1 a few years ago, and I evaluated Glue but haven't used it in a real project.
Axis 1, when I used it, was acceptably good for the time. It did the job, interoperated with .NET web services with only a little bit of prodding, and worked well. I was satisfied with it at the time, but wouldn't use it again - web services have moved on.
Despite the number of ticks in the comparison matrix that Axis 2 has, I found it painful to use, and wouldn't use it again. The documentation was poor, the code was buggy, and the whole approach seems flawed; I don't want to create an Axis 2-specific ".aar" file for deployment - I've already got an application server that will accept .war files! Nor do I particularly want another new XML object model - I've got plenty already, thanks.
XFire has been a pleasure to use. Good documentation, non-buggy code, Spring integration and JSR-181 all make it usable and powerful. I still think that .NET web services have a slight edge, but it's very close now.
GlassFish looks great in terms of feature checkboxes. I'd love an opinion of what it's actually like to use from someone who has first-hand experience of using it on a real project.