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>