...
- Scope: SOAP API only, but consider how the library choice affects the REST API.
- Contract-first vs Code-first? Jiri's preference is contract-first. This is compatible with our desire to keep the work relegated to the SOAP side, and wire-compatible with previous versions of Fedora
WS Stack Comparison
I've picked following web service stacks as candidates:
All the frameworks support JAX-WS specification so that it is easier to migrate from one to another. There exist two frameworks which are not mentioned in the following text, as they do not support JAX-WS standard and the community behind those product is not as big as behind the four frameworks mentioned above. The two frameworks:
Comparison
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
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Axis2 | 0 | - | 1 | 0.5 | 1 | 1 | 1 | 1 | 1 | 1 |
CXF | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 |
Metro | 1 | 0 | 1 | 0.5 | 1 | 2 | 1 | 1 | 1 | 1 |
JBoss WS | 0 | - | 0 | 0 | 0* | - | 1 | 1 | 1 | 0 |
Spring WS | - | 1 | 0 | 1 | 0 | - | 0 | 0 | 0 | 0 |
*only java2wsdl
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.
- CXF = http://mail-archives.apache.org/mod_mbox/cxf-commits/ (https://issues.apache.org/jira/browse/CXF/)
- Metro = http://java.net/projects/jax-ws/lists/cvs/archive (http://java.net/jira/browse/JAX_WS), part of Java EE 6 (Oracle)
- Axis2 = https://issues.apache.org/jira/browse/AXIS2
- JBoss WS = https://issues.jboss.org/browse/JBWS
- Spring WS = https://jira.springsource.org/browse/SWS
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
- http://axis.apache.org/axis2/java/core/
- http://cxf.apache.org/
- http://metro.java.net/
- http://www.jboss.org/jbossws
- http://www.ibm.com/developerworks/views/webservices/libraryview.jsp?search_by=java+web+services,%20sosnoski
- http://wiki.apache.org/ws/StackComparison
- http://www.ibm.com/developerworks/webservices/library/j-jws14/index.html
- http://www.googlefight.com/index.php?lang=en_GB&word1=cxf&word2=axis2
Work Plan
May 23 - 31: Analysis and framework recommendation
...