JAX-WS-Proposal
Overview
JSR Specification |
JSR 224: The Java API for XML Web Services (JAX-WS) 2.0 |
Related JSRs |
JSR 181: Web Services Metadata for the Java Platform |
|
JSR 222: The Java Architecture for XML Binding (JAX-B) 2.0 |
JIRA Issue |
|
Corporation |
IBM |
Requester |
Nicholas L Gallardo (nlgallar@us.ibm.com) |
Axis Committer |
Rich Scheuerle (scheu@apache.org) (Yahoo IM: richscheu) |
Developers/Contributors |
Jeff Barrett (barrettj@us.ibm.com) (Yahoo IM: barrettjl1027) |
|
Nikhil Thaker |
|
Mike Rheinheimer |
|
Brent Ulbricht |
|
Dan Sedov |
|
Lizet Ernand |
|
Samuel Isokpunwu |
Architecture
The images below describe at a high level, the architecture for the JAX-WS implementation. The pieces are color coded to denote their scope.
The blue pieces are the APIs provided by the JAX-WS specification. These are the APIs that users will interact with and are strictly the javax.xml.ws.* interfaces/classes.
- The purple pieces are the actual implementation components to support the JAX-WS API.
- The yellow pieces are the portions of the Axis2 runtime that are leveraged in implementing the purple pieces.
A few other things to note:
The Axis2 code is only touched in two places. In the AxisController on the client side and in the JAXWSMessageReceiver on the server side.
- There is no support for JAX-WS handlers right now, but they are included in the diagrams below.
Here is the client architecture:
Here is the server architecture:
Class Roadmap
The following table describes the important classes in the architecture:
Class |
Client/Server/Test |
Description |
org.apache.axis2.jaxws.Dispatch |
Client |
Implementation of Dispatch<T>. This is the only client api currently supported. |
org.apache.axis2.jaxws.spi.ServiceDelegate |
Client |
JAX-WS ServiceDelegate implementation to handle client request. This is the entry point from the client. |
org.apache.axis2.jaxws.client.BindingProvider |
Client |
JAX-WS BindingProvider implementation to hold client request context. |
org.apache.axis2.jaxws.client.AxisController |
Client |
Client side abstraction layer that accesses the AxisEngine. |
org.apache.axis2.jaxws.impl.AsyncResponseProcessor |
Client |
Async Response processor for Async invocation. |
org.apache.axis2.jaxws.server.JAXWSMessageReceiver |
Server |
JAX-WS implementation of org.apache.axis.MessageReceiver |
org.apache.axis2.jaxws.framework.JAXWSTest |
Test |
Root class for the JAX-WS tests. This class will be remove in subsequent drops. |
Coding Conventions
The contributed code follows the same conventions used in the Axis2 code base.
- The JAX-WS is an Axis 2 component module (modules/jaxws)
- The source and test directories of JAX-WS use the same directory structure as the other Axis 2 modules.
- The module is constructed and maintained using maven.
- The maven.xml file, project.xml and project.properties files use the same conventions as the other modules.
- The project.xml file extends the Axis2 etc/project.xml file.
- The Axis2 etc/project.properties variables are used to determine the versions of dependent jars.
- The conributors to the JAX-WS module are listed in the modules/jaxws/project.xml file.
- The module is Java 5.0 enabled.
- The maven.multiproject.includes.requiresJDK15 variable in etc/project.properties is updated to include the JAXWS project.
- All code files contain an Apache and IBM copyright.
- The code follows standard Java Coding Conventions
- The root package name is org.apache.axis2.jaxws.
- TODO and FIXME tasks are used to identify missing or broken behavior.
- Currently all messages are inline. There is no message resource bundle.
Testing
There are 20 JAX-WS tests provided in the initial JAX-WS code drop.
- The test directory structure is similar to the other Axis2 modules.
- The test output is captured in the modules/jaxws/target/test-reports directory.
- Tests labeled as async are testing asychrony at the programming model level only. They are not using a separate listener since WS-Addressing is not enabled.
- The tests are currently driven from the single class, org.apache.axis2.jaxws.framework.JAXWSTest. We will change this architecture as we add more tests.
We are working on additional tests. Subsequent tests will be documented with javadoc. The following table is provided for evaluation purposes only.
Test Name |
Status |
Test Description |
StringDispatch.testSync() |
Pass |
JAX-WS Dispatch<String> Payload Mode Test |
StringDispatch.testSyncWithMessageMode() |
Pass |
JAX-WS Dispatch<String> Message Mode Test |
StringDispatch.testAsyncCallback() |
Pass |
JAX-WS Asynchronous Callback Dispatch<String> Payload Test |
StringDispatch.testAsyncCallbackWithMessageMode() |
Pass |
JAX-WS Asynchronous Callback Dispatch<String> Message Mode Test |
StringDispatch.testOneWay() |
Pass |
JAX-WS Dispatch<Source> Payload One-Way Test |
SourceDispatch.testSync() |
Pass |
JAX-WS Dispatch<Source> Payload Mode Test...using StreamSource argument |
SourceDispatch.testSyncWithMessageMode() |
Pass |
JAX-WS Dispatch<Source> Message Mode Test...using StreamSource argument |
SourceDispatch.testAsyncCallback() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Payload Test...using StreamSource argument |
SourceDispatch.testAsyncCallbackWithMessageMode() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Message Test...using StreamSource |
SourceDispatch.testOneWay() |
Pass |
JAX-WS Dispatch<Source> Payload One-Way Test...using StreamSource argument |
DOMSourceDispatch.testSync() |
Pass |
JAX-WS Dispatch<Source> Payload Mode Test...using DOMSource argument |
DOMSourceDispatch.testSyncWithMessageMode() |
Pass |
JAX-WS Dispatch<Source> Message Mode Test...using DOMSource argument |
DOMSourceDispatch.testAsyncCallback() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Payload Test...using DOMSource argument |
DOMSourceDispatch.testAsyncCallbackWithMessageMode() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Message Test...using DOMSource |
DOMSourceDispatch.testOneWay() |
Pass |
JAX-WS Dispatch<Source> Payload One-Way Test...using DOMSource argument |
SAXSourceDispatch.testSync() |
Pass |
JAX-WS Dispatch<Source> Payload Mode Test...using SAXSource argument |
SAXSourceDispatch.testSyncWithMessageMode() |
Pass |
JAX-WS Dispatch<Source> Message Mode Test...using SAXSource argument |
SAXSourceDispatch.testAsyncCallback() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Payload Test...using SAXSource argument |
SAXSourceDispatch.testAsyncCallbackWithMessageMode() |
Pass |
JAX-WS Asynchronous Callback Dispatch<Source> Message Test...using SAXSource |
SAXSourceDispatch.testOneWay() |
Pass |
JAX-WS Dispatch<Source> Payload One-Way Test...using SAXSource argument |