Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Objective

Fedora has used Axis 1.3 for SOAP support for quite some time. This is an obsolete library and better alternatives (with support for MTOM and for protocols in addition to HTTP) are available. This improvement will update Fedora to use a modern Java WS framework for SOAP and move away from Axis 1.3. In addition, it would update Fedora's SOAP API to use MTOM where appropriate.

...

The following sections are now historical, because the decision to use Apache CXF (as per Jiri's recommendation) has been finalized.

WS Stack Comparison

I've picked following web service stacks as candidates:

...

Comparison

In the table below, by "JBoss WS" I mean their native implementation, as they support CXF and Metro as well.

Criteria

1. customization of generating the server-side code from WSDL
2. modularity of jar files
3. presence in Maven Central
4. Spring integration
5. wsdl2java (server-side skeletons JAX-WS annotations)
6. performance (the higher, the better)
7. MTOM
8. JAXB
9. JAX-WS
10. JAX-RS

...

Info

The "Spring integration" comparison is based on the tutorials posted on here (Axis2)here (CXF) and here (Metro), and on the sample applications attached to the a WS stack. For instance, the sample application distributed with CXF for wsdl-first approach is well documented, there is a support for both Maven and Ant, the Spring integration is also done and the example of using MTOM is also present. Samples from Axis2 sometimes support Maven, sometimes Ant, there is an MTOM example, however, the Spring integration and the wsdl-first examples are missing. All sample applications from the Metro stack use Ant for building, there is an example of the wsdl-first approach and MTOM, but Spring integration showcase is missing.

Community Support

It is hard to measure this aspect, so I put here links to the issue trackers or, where it is present, the mailing lists with commits. I forgot to mention that CXF and Axis2 are both supported by Apache Foundations and Metro by Oracle. If fcrepo is going to migrate to Java EE 6 (with Context Dependency Injection, JAX-RS, etc.) in the future, Metro or JBoss WS stacks are better prepared to this migration, in my opinion.

Proposed WS Stack

I propose to use the CXF and as a binding technology the JAXB. When building the project from WSDLs (Fedora-API-A.wsdl and Fedora-API-M.wsdl) and from fedora-types.xsd, the server-side skeletons annotated with JAX-WS annotations and the datatype POJOs will be generated by wsimport tool, i.e. contract-first approach. Let's discuss this proposal. All the frameworks which support JAX-WS provide almost the same code, the main difference is in the infrastructure in behind, for instance deployment of WS, integration with Maven, etc. I am open to any other proposal.

References