Author: edwardsmj
Date: Fri Jun 18 21:02:02 2010
New Revision: 956128
URL: http://svn.apache.org/viewvc?rev=956128&view=rev
Log:
Handle the receipt of messageID data from a wsa:MessageID header in an incoming
Web service invocation of a bidirectional service, transmit this data to the
callback invocation from the service and embed into a wsa:RelatesTo SOAP header
in the callback Wen service message, as required by the OASIS Web Service
Binding spec, described in TUSCANY-3592
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/Axis2ReferenceBindingInvoker.java
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/TuscanyServiceProvider.java
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/Axis2ReferenceBindingInvoker.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/Axis2ReferenceBindingInvoker.java?rev=956128&r1=956127&r2=956128&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/Axis2ReferenceBindingInvoker.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/Axis2ReferenceBindingInvoker.java
Fri Jun 18 21:02:02 2010
@@ -26,6 +26,7 @@ import javax.wsdl.Operation;
import javax.wsdl.PortType;
import javax.xml.namespace.QName;
+import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
@@ -59,20 +60,17 @@ import org.oasisopen.sca.ServiceRuntimeE
*/
public class Axis2ReferenceBindingInvoker implements Invoker {
public static final QName QNAME_WSA_FROM =
- new QName(AddressingConstants.Final.WSA_NAMESPACE,
- AddressingConstants.WSA_FROM,
- AddressingConstants.WSA_DEFAULT_PREFIX);
+ new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_FROM, AddressingConstants.WSA_DEFAULT_PREFIX);
public static final QName QNAME_WSA_TO =
- new QName(AddressingConstants.Final.WSA_NAMESPACE,
- AddressingConstants.WSA_TO,
- AddressingConstants.WSA_DEFAULT_PREFIX);
+ new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_TO, AddressingConstants.WSA_DEFAULT_PREFIX);
public static final QName QNAME_WSA_ACTION =
- new QName(AddressingConstants.Final.WSA_NAMESPACE,
- AddressingConstants.WSA_ACTION,
- AddressingConstants.WSA_DEFAULT_PREFIX);
-
+ new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_ACTION, AddressingConstants.WSA_DEFAULT_PREFIX);
+
+ public static final QName QNAME_WSA_RELATESTO =
+ new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_RELATES_TO, AddressingConstants.WSA_DEFAULT_PREFIX);
+
private RuntimeEndpointReference endpointReference;
private ServiceClient serviceClient;
private QName wsdlOperationName;
@@ -160,6 +158,7 @@ public class Axis2ReferenceBindingInvoke
if( isInvocationForCallback( msg ) ) {
addWSAToHeader( sh, toAddress );
addWSAActionHeader( sh );
+ addWSARelatesTo( sh, msg );
} // end if
// Allow privileged access to read properties. Requires
PropertiesPermission read in
@@ -229,6 +228,25 @@ public class Axis2ReferenceBindingInvoke
actionOM.setText(action == null ? "" : action);
sh.addChild(actionOM);
} // end method addWSAActionHeader
+
+ private static String WS_MESSAGE_ID = "WS_MESSAGE_ID";
+ protected static String SCA_CALLBACK_REL =
"http://docs.oasis-open.org/opencsa/sca-bindings/ws/callback";
+ /**
+ * Adds a wsa:RelatesTo SOAP header if the incoming invocation had a
wsa:MessageID SOAP header present
+ * - note that OASIS SCA requires that the RelationshipType attribute is
set to a particular SCA value
+ * @param sh - the SOAP headers
+ * @param msg - the message
+ */
+ private void addWSARelatesTo( SOAPHeader sh, Message msg ) {
+ String idValue = (String) msg.getHeaders().get(WS_MESSAGE_ID);
+ if( idValue != null ){
+ OMElement relatesToOM = sh.getOMFactory().createOMElement(
QNAME_WSA_RELATESTO );
+ OMAttribute relType =
sh.getOMFactory().createOMAttribute("RelationshipType", null, SCA_CALLBACK_REL);
+ relatesToOM.addAttribute( relType );
+ relatesToOM.setText( idValue );
+ sh.addChild( relatesToOM );
+ }
+ } // end method addWSARelatesTo
/**
* Indicates if the invocation is for the callback of a bidirectional
service
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/TuscanyServiceProvider.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/TuscanyServiceProvider.java?rev=956128&r1=956127&r2=956128&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/TuscanyServiceProvider.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/provider/TuscanyServiceProvider.java
Fri Jun 18 21:02:02 2010
@@ -52,7 +52,8 @@ public class TuscanyServiceProvider {
new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_FROM);
public static final QName QNAME_WSA_REFERENCE_PARAMETERS =
new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.EPR_REFERENCE_PARAMETERS);
-
+ public static final QName QNAME_WSA_MESSAGEID =
+ new QName(AddressingConstants.Final.WSA_NAMESPACE,
AddressingConstants.WSA_MESSAGE_ID);
private RuntimeEndpoint endpoint;
private WebServiceBinding wsBinding;
@@ -116,7 +117,8 @@ public class TuscanyServiceProvider {
}
} // end if
// Retrieve other callback-related headers
- }
+ handleMessageIDHeader( header, msg );
+ } // end if
// Create a from EPR to hold the details of the callback endpoint
EndpointReference from = null;
@@ -146,5 +148,21 @@ public class TuscanyServiceProvider {
throw new InvocationTargetException((Throwable)
response.getBody());
}
return response.getBody();
- }
+ } // end method
+
+ private static String WS_MESSAGE_ID = "WS_MESSAGE_ID";
+ /**
+ * Handle a SOAP wsa:MessageID header - place the contents into the
Tuscany message for use by any callback
+ * @param header - the SOAP Headers
+ * @param msg - the Tuscany Message
+ */
+ private void handleMessageIDHeader( SOAPHeader header, Message msg ) {
+ if( header == null ) return;
+ OMElement messageID =
header.getFirstChildWithName(QNAME_WSA_MESSAGEID);
+ if (messageID != null) {
+ String idValue = messageID.getText();
+ // Store the value of the message ID element into the message
under "WS_MESSAGE_ID"...
+ msg.getHeaders().put(WS_MESSAGE_ID, idValue);
+ } // end if
+ } // end method handleMessageID
}