You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2010/03/05 17:42:12 UTC

svn commit: r919482 - in /tuscany/sandbox/rfeng/binding-ws-jaxws: ./ src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/ src/test/resources/

Author: rfeng
Date: Fri Mar  5 16:42:11 2010
New Revision: 919482

URL: http://svn.apache.org/viewvc?rev=919482&view=rev
Log:
Start to play with endpoint integration 

Added:
    tuscany/sandbox/rfeng/binding-ws-jaxws/
      - copied from r917245, tuscany/sca-java-2.x/contrib/modules/binding-ws-jaxws/
Modified:
    tuscany/sandbox/rfeng/binding-ws-jaxws/pom.xml
    tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingProviderFactory.java
    tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSReferenceBindingProvider.java
    tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java
    tuscany/sandbox/rfeng/binding-ws-jaxws/src/test/resources/WeatherForecast.composite

Modified: tuscany/sandbox/rfeng/binding-ws-jaxws/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/binding-ws-jaxws/pom.xml?rev=919482&r1=917245&r2=919482&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/binding-ws-jaxws/pom.xml (original)
+++ tuscany/sandbox/rfeng/binding-ws-jaxws/pom.xml Fri Mar  5 16:42:11 2010
@@ -52,13 +52,6 @@
 
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>tuscany-policy-xml</artifactId>
-            <version>2.0-SNAPSHOT</version>
-            <scope>runtime</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-binding-ws</artifactId>
             <version>2.0-SNAPSHOT</version>
         </dependency>
@@ -226,7 +219,7 @@
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>jaxws-maven-plugin</artifactId>
-                <version>1.11</version>
+                <version>1.12</version>
                 <!-- Explicitly add the transitive dependencies for jaxws-api
                      http://jira.codehaus.org/browse/MEV-498
                 -->

Modified: tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingProviderFactory.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingProviderFactory.java?rev=919482&r1=917245&r2=919482&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingProviderFactory.java (original)
+++ tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingProviderFactory.java Fri Mar  5 16:42:11 2010
@@ -29,9 +29,8 @@
 import org.apache.tuscany.sca.provider.BindingProviderFactory;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
 
 /**
  * Axis2BindingProviderFactory
@@ -55,21 +54,14 @@
         dataBindings = extensionPoints.getExtensionPoint(DataBindingExtensionPoint.class);
     }
 
-    public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
-                                                                   RuntimeComponentReference reference,
-                                                                   WebServiceBinding binding) {
-        return new JAXWSReferenceBindingProvider(component, reference, binding,
-                                                 modelFactories, dataBindings);
+    public ReferenceBindingProvider createReferenceBindingProvider(RuntimeEndpointReference endpointReference) {
+        return new JAXWSReferenceBindingProvider(endpointReference, modelFactories, dataBindings);
     }
 
-    public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
-                                                               RuntimeComponentService service,
-                                                               WebServiceBinding binding) {
-        return new JAXWSServiceBindingProvider(component, service, binding,
-                                               servletHost, modelFactories,
-                                               dataBindings);
+    public ServiceBindingProvider createServiceBindingProvider(RuntimeEndpoint endpoint) {
+        return new JAXWSServiceBindingProvider(endpoint, servletHost, modelFactories, dataBindings);
     }
-    
+
     public Class<WebServiceBinding> getModelType() {
         return WebServiceBinding.class;
     }

Modified: tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSReferenceBindingProvider.java?rev=919482&r1=917245&r2=919482&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSReferenceBindingProvider.java (original)
+++ tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSReferenceBindingProvider.java Fri Mar  5 16:42:11 2010
@@ -25,8 +25,7 @@
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
 import org.oasisopen.sca.ServiceRuntimeException;
 import org.w3c.dom.Node;
 
@@ -35,18 +34,16 @@
     private javax.xml.soap.MessageFactory messageFactory;
     private WebServiceBinding wsBinding;
 
-    public JAXWSReferenceBindingProvider(RuntimeComponent component,
-                                         RuntimeComponentReference reference,
-                                         WebServiceBinding wsBinding,
+    public JAXWSReferenceBindingProvider(RuntimeEndpointReference endpointReference,
                                          FactoryExtensionPoint modelFactories,
                                          DataBindingExtensionPoint dataBindings) {
 
         this.messageFactory = modelFactories.getFactory(javax.xml.soap.MessageFactory.class);
-        this.wsBinding = wsBinding;
+        this.wsBinding = (WebServiceBinding) endpointReference.getBinding();
 
         // A WSDL document should always be present in the binding
         if (wsBinding.getWSDLDocument() == null) {
-            throw new ServiceRuntimeException("No WSDL document for " + component.getName() + "/" + reference.getName());
+            throw new ServiceRuntimeException("No WSDL document for " + endpointReference.getURI());
         }
 
         // Set to use the Axiom data binding

Modified: tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java?rev=919482&r1=917245&r2=919482&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java (original)
+++ tuscany/sandbox/rfeng/binding-ws-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java Fri Mar  5 16:42:11 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.sca.binding.ws.jaxws;
 
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPFactory;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Provider;
@@ -30,23 +32,27 @@
 import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.sca.host.http.ServletHost;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
 import org.oasisopen.sca.ServiceRuntimeException;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 @WebServiceProvider
 @ServiceMode(Mode.MESSAGE)
 public class JAXWSServiceBindingProvider implements ServiceBindingProvider, Provider<SOAPMessage> {
-
+    private MessageFactory messageFactory;
+    private RuntimeEndpoint endpoint;
     private WebServiceBinding wsBinding;
-    private Provider<SOAPMessage> provider;
-    private Endpoint endpoint;
+    private Endpoint wsEndpoint;
+    private javax.xml.soap.MessageFactory soapMessageFactory;
+    private SOAPFactory soapFactory;
 
-    public JAXWSServiceBindingProvider(RuntimeComponent component,
-                                       RuntimeComponentService service,
-                                       WebServiceBinding wsBinding,
+    public JAXWSServiceBindingProvider(RuntimeEndpoint endpoint,
                                        ServletHost servletHost,
                                        FactoryExtensionPoint modelFactories,
                                        DataBindingExtensionPoint dataBindings) {
@@ -55,11 +61,20 @@
             throw new ServiceRuntimeException("No Servlet host is avaible for HTTP web services");
         }
 
-        this.wsBinding = wsBinding;
+        this.messageFactory = modelFactories.getFactory(MessageFactory.class);
+
+        this.soapMessageFactory = modelFactories.getFactory(javax.xml.soap.MessageFactory.class);
+        this.soapFactory = modelFactories.getFactory(SOAPFactory.class);
+
+        // soapMessageFactory = javax.xml.soap.MessageFactory.newInstance();
+        // soapFactory = SOAPFactory.newInstance();
+
+        this.endpoint = endpoint;
+        this.wsBinding = (WebServiceBinding)endpoint.getBinding();
 
         // A WSDL document should always be present in the binding
         if (wsBinding.getWSDLDocument() == null) {
-            throw new ServiceRuntimeException("No WSDL document for " + component.getName() + "/" + service.getName());
+            throw new ServiceRuntimeException("No WSDL document for " + endpoint.getURI());
         }
 
         // Set to use the Axiom data binding
@@ -69,12 +84,12 @@
     }
 
     public void start() {
-        endpoint = Endpoint.create(this);
-        endpoint.publish(wsBinding.getURI());
+        wsEndpoint = Endpoint.create(this);
+        wsEndpoint.publish(wsBinding.getURI());
     }
 
     public void stop() {
-        endpoint.stop();
+        wsEndpoint.stop();
     }
 
     public InterfaceContract getBindingInterfaceContract() {
@@ -86,8 +101,31 @@
     }
 
     public SOAPMessage invoke(SOAPMessage request) {
-        // TODO Auto-generated method stub
-        return null;
+        try {
+            // Assuming document-literal-wrapper style
+            Node root = request.getSOAPBody().getFirstChild();
+            String operationName = root.getLocalName();
+            Operation operation = null;
+            for (InvocationChain invocationChain : endpoint.getInvocationChains()) {
+                if (operationName.equals(invocationChain.getSourceOperation().getName())) {
+                    operation = invocationChain.getSourceOperation();
+                    break;
+                }
+            }
+            if (operation == null) {
+                throw new SOAPException("Operation not found: " + operationName);
+            }
+
+            Message requestMsg = messageFactory.createMessage();
+            requestMsg.setBody(root);
+            requestMsg.setOperation(operation);
+            Message responseMsg = endpoint.invoke(operation, requestMsg);
+            Element element = responseMsg.getBody();
+            SOAPMessage response = soapMessageFactory.createMessage();
+            response.getSOAPBody().addChildElement(soapFactory.createElement(element));
+            return response;
+        } catch (SOAPException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
-
 }

Modified: tuscany/sandbox/rfeng/binding-ws-jaxws/src/test/resources/WeatherForecast.composite
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/binding-ws-jaxws/src/test/resources/WeatherForecast.composite?rev=919482&r1=917245&r2=919482&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/binding-ws-jaxws/src/test/resources/WeatherForecast.composite (original)
+++ tuscany/sandbox/rfeng/binding-ws-jaxws/src/test/resources/WeatherForecast.composite Fri Mar  5 16:42:11 2010
@@ -17,7 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
 -->
-<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
            targetNamespace="http://weather"
            name="WeatherForecast">
 
@@ -26,6 +26,9 @@
         <reference name="weatherForecast">
             <binding.ws wsdlElement="http://www.webservicex.net#wsdl.port(WeatherForecast/WeatherForecastSoap)" />
         </reference>
+        <service name="WeatherForecastSoap">
+            <binding.ws/> 
+        </service>
     </component>
 
 </composite>