You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sc...@apache.org on 2011/11/29 19:32:50 UTC
svn commit: r1208010 -
/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
Author: scottkurz
Date: Tue Nov 29 18:32:49 2011
New Revision: 1208010
URL: http://svn.apache.org/viewvc?rev=1208010&view=rev
Log:
Add dynamic (vs. static) dispatch to invoker for use by callback support.
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
Modified: tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java?rev=1208010&r1=1208009&r2=1208010&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java Tue Nov 29 18:32:49 2011
@@ -94,7 +94,8 @@ public class JAXWSBindingInvoker impleme
public static final QName CONVERSATION_ID_REFPARM_QN =
new QName(SCA11_TUSCANY_NS, "ConversationID", TUSCANY_PREFIX);
- protected Dispatch<SOAPMessage> dispatch;
+ private boolean dynamicDispatchForCallback = false;
+ protected Dispatch<SOAPMessage> staticDispatch;
private MessageFactory messageFactory;
private Operation operation;
private WebServiceBinding wsBinding;
@@ -109,10 +110,24 @@ public class JAXWSBindingInvoker impleme
this.operation = operation;
this.wsBinding = wsBinding;
this.endpointReference = endpointReference;
- this.dispatch = createDispatch(wsBinding);
+
+ if (endpointReference.getReference().isForCallback()) {
+ this.dynamicDispatchForCallback = true;
+ } else {
+ this.staticDispatch = createStaticDispatch(wsBinding);
+ }
+ }
+
+ protected Dispatch<SOAPMessage> createDynamicDispatch(WebServiceBinding wsBinding) {
+ QName serviceName = wsBinding.getService().getQName();
+ QName portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPort().getName());
+ Service service = Service.create(serviceName);
+ service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, wsBinding.getURI());
+
+ return service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
}
- protected Dispatch<SOAPMessage> createDispatch(WebServiceBinding wsBinding) {
+ protected Dispatch<SOAPMessage> createStaticDispatch(WebServiceBinding wsBinding) {
URL wsdlLocation = null;
try {
if (wsBinding.getGeneratedWSDLDocument() != null && wsBinding.getGeneratedWSDLDocument().getDocumentBaseURI() != null) {
@@ -130,21 +145,31 @@ public class JAXWSBindingInvoker impleme
e1.printStackTrace();
}
- QName serviceName = null;
- QName portName = null;
- Service service = null;
-
if (wsdlLocation != null) {
- serviceName = wsBinding.getServiceName();
- portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPortName());
- service = Service.create(wsdlLocation, serviceName);
+ return createDispatchFromWSDL(wsBinding, wsdlLocation);
} else {
- serviceName = wsBinding.getService().getQName();
- portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPort().getName());
- service = Service.create(serviceName);
- service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, wsBinding.getURI());
- }
-
+ return createDispatchFromURI(wsBinding, wsBinding.getURI());
+ }
+ }
+
+ protected Dispatch<SOAPMessage> createDynamicDispatch(WebServiceBinding wsBinding, String uri) {
+ return createDispatchFromURI(wsBinding, uri);
+ }
+
+ private Dispatch<SOAPMessage> createDispatchFromWSDL(WebServiceBinding wsBinding, URL wsdlLocation) {
+ QName serviceName = wsBinding.getServiceName();
+ QName portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPortName());
+ Service service = Service.create(wsdlLocation, serviceName);
+
+ return service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
+ }
+
+ protected Dispatch<SOAPMessage> createDispatchFromURI(WebServiceBinding wsBinding, String uri) {
+ QName serviceName = wsBinding.getService().getQName();
+ QName portName = new QName(serviceName.getNamespaceURI(), wsBinding.getPort().getName());
+ Service service = Service.create(serviceName);
+ service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, uri);
+
return service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
}
@@ -227,16 +252,32 @@ public class JAXWSBindingInvoker impleme
Node msgNode = body.getOwnerDocument().importNode((Node)args[0], true);
body.appendChild(msgNode);
soapMessage.saveChanges();
+
+ Dispatch<SOAPMessage> invocationDispatch = null;
+
+ //TODO - captured static case as well???
+ if (dynamicDispatchForCallback) {
+ Endpoint ep = msg.getTo();
+ if (ep != null && ep.getBinding() != null) {
+ String address = ep.getBinding().getURI();
+ invocationDispatch = createDynamicDispatch(wsBinding, address);
+ } else {
+ throw new ServiceRuntimeException("[BWS20025] Unable to determine destination endpoint for endpoint reference " + endpointReference);
+ }
+ } else {
+ invocationDispatch = staticDispatch;
+ }
+
if (operation.isNonBlocking()) {
- dispatch.invokeOneWay(soapMessage);
+ invocationDispatch.invokeOneWay(soapMessage);
return null;
}
if (action != null) {
- dispatch.getRequestContext().put(Dispatch.SOAPACTION_USE_PROPERTY, true);
- dispatch.getRequestContext().put(Dispatch.SOAPACTION_URI_PROPERTY, action);
+ invocationDispatch.getRequestContext().put(Dispatch.SOAPACTION_USE_PROPERTY, true);
+ invocationDispatch.getRequestContext().put(Dispatch.SOAPACTION_URI_PROPERTY, action);
}
- SOAPMessage response = dispatch.invoke(soapMessage);
+ SOAPMessage response = invocationDispatch.invoke(soapMessage);
return response;
}