Title/Summary: A binding.ws implementation based on JAX-WS Dispatch and Provider APIs

Student: Xie Xiaodong

Student e-mail: xxd82329@gmail.com

Time-zone: GMT+1:00

Student Major: Software Engineering of Distributed Systems

Student Degree: Master

Student Graduation: 2010

Organization: The Apache Software Foundation (ASF)

Assigned Mentor: Raymond Feng

Abstract:

The current binding.ws in Tuscany is implemented based on Axis2. Now JAX-WS is shipped with JDK 1.6. It would be nice to support the web services with the JDK based on the standard JAX-WS APIs/SPIs. With this feature, it would be very simple to add integration to JAX-WS stacks such as CXF or Metro. The work will involve three features: Use JAX-WS Dispatch API to make outbound WS invocation on behalf of SCA reference, Use JAX-WS Provider API to expose SCA services as JAX-WS endpoints, Allow other databindings to be transformed into JAXB friendly representations so that JAX-WS can support them.

Detailed Description:

For the first feature - Use JAX-WS Dispatch API to make outbound WS invocation on behalf of SCA reference

Here we need to implement something like JAXWSBindingInvoker. First, get enough parameters (from the configuration file or be fetched at runtime) to create an instance of javax.xml.ws.Service, this class acts as the client of a web service. Then the createDispatch() method of the service class could be called to get an instance of Dispatch interface. Then this Tuscany component could use JAX-WS Dispatch API to make WS invocation. Since this component uses the interface of org.apache.tuscany.sca.invocation.Invoker. So the client of this component will have to use feature 3, to parse the return value at org.apache.tuscany.sca.invocation.Message interface back to a SOAPMessage. Also we have to use feature 3, since Invoker will only take Message interface as its parameter.

For the second feature - Use JAX-WS Provider API to expose SCA services as JAX-WS endpoints

Here we need to implement something like JAXWSServiceBindingProvider which will implement javax.xml.wsProvider<SOAPMessage> interface. This class acts as the Web Service provider if any Tuscany component need to publish its service as a web service. The invoke method in this class will call the corresponding Tuscany component which publishes its service as web service.

For the third feature - Allow other databindings to be transformed into JAXB friendly representations so that JAX-WS can support them.

Here we at least should provide an XmlAdapter for the transformation between tuscany Message and SOAPMessage.

In order to implement all these three features, some fundamental work should be done first, we need to extract configuration about the these features, and find the JAX-WS annotation information.

Deliverables:

All the source code of these three features and fundamental works, documentation, unit-test code, and some example demonstrating how to use these features.

Time Schedule:

There will be 11-12 weeks for working on this project before the deadline. Here is my time schedule:

Week 1: finish the fundamental works such as extract configuration information and annotation information.

Week 2 - 9: finish all the 3 features, including document and unit-test code.

Week 10: use these features to implement some small examples.

Week 11 - 12: Integration Test.

Additional Information:

I'm Xie Xiaodong, come from China. Now I'm in Sweden, pursuing my second Master Degree on Software Engineering of Distributed Systems. Before I came to Sweden, I worked for an famous online payment company in China for one and a half years. I'm quite familiar with Servlet Specification and Development of Web application using Servlet technology. I'm also familiar with many kinds of frameworks such as Spring, Hibernate, Ibatis and so on. During the spare time of my previous job, I have read some articles about SCA, and have implemented some very simple tiny program using Tuscany.

Work under processing:

I've succesfully build the source code checked out from http://svn.apache.org/repos/asf/tuscany/java/sca, and getting familiar with the structure of code gradually.

  • No labels