Author: asankha
Date: Tue May 8 21:42:12 2007
New Revision: 536414
URL: http://svn.apache.org/viewvc?view=rev&rev=536414
Log:
Fix WS-RM for endpoints for RM version 1.0
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
Tue May 8 21:42:12 2007
@@ -48,6 +48,9 @@
/** The system property used to specify/override the synapse configuration
XML location */
String SYNAPSE_XML = "synapse.xml";
+ /** a message context property set to hold the relates to for POX
responses */
+ String RELATES_TO_FOR_POX = "RelatesToForPox";
+
/** If the message context contains a Boolean.TRUE with this key, WS-A
would be turned on send */
String OUTFLOW_ADDRESSING_ON = "OUTFLOW_ADDRESSING_ON";
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
Tue May 8 21:42:12 2007
@@ -35,6 +35,7 @@
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.synapse.Constants;
import javax.xml.namespace.QName;
@@ -184,7 +185,7 @@
// envelope does not contain addressing headers
MessageContext responseMessageContext = new MessageContext();
responseMessageContext.setMessageID(msgctx.getMessageID());
- responseMessageContext.addRelatesTo(new
RelatesTo(msgctx.getMessageID()));
+ responseMessageContext.setProperty(Constants.RELATES_TO_FOR_POX,
msgctx.getMessageID());
responseMessageContext.setOptions(options);
addMessageContext(responseMessageContext);
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
Tue May 8 21:42:12 2007
@@ -23,6 +23,7 @@
import org.apache.axis2.client.async.Callback;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.util.Utils;
import org.apache.axis2.transport.nhttp.NhttpConstants;
import org.apache.axis2.addressing.RelatesTo;
import org.apache.commons.logging.Log;
@@ -32,6 +33,7 @@
import org.apache.synapse.SynapseException;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.axiom.soap.SOAPFault;
+import org.apache.sandesha2.client.SandeshaClientConstants;
import java.util.*;
@@ -61,18 +63,25 @@
public void receive(MessageContext messageCtx) throws AxisFault {
+ String messageID = null;
+
if (messageCtx.getOptions() != null &&
messageCtx.getOptions().getRelatesTo() != null) {
- String messageID =
messageCtx.getOptions().getRelatesTo().getValue();
+ messageID = messageCtx.getOptions().getRelatesTo().getValue();
+ } else if
(messageCtx.getProperty(SandeshaClientConstants.SEQUENCE_KEY) == null) {
+ messageID = (String)
messageCtx.getProperty(Constants.RELATES_TO_FOR_POX);
+ }
+
+ if (messageID != null) {
Callback callback = (Callback) callbackStore.remove(messageID);
RelatesTo[] relates = messageCtx.getRelationships();
- if (relates.length > 1) {
+ if (relates != null && relates.length > 1) {
// we set a relates to to the response message so that if WSA
is not used, we
// could still link back to the original message. But if WSA
was used, this
// gets duplicated, and we should remove it
removeDuplicateRelatesTo(messageCtx, relates);
}
-
+
if (callback != null) {
handleMessage(messageCtx, ((AsyncCallback)
callback).getSynapseOutMsgCtx());
} else {
@@ -81,7 +90,7 @@
messageID + " But a callback has not been registered
to process this response");
}
- } else {
+ } else if (!Utils.isExplicitlyTrue(messageCtx,
NhttpConstants.SC_ACCEPTED)){
// TODO invoke a generic synapse error handler for this message
log.warn("Synapse received a response message without a message
Id");
}
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
Tue May 8 21:42:12 2007
@@ -290,6 +290,11 @@
try {
MessageContext responseMsgCtx =
outMsgCtx.getOperationContext().
getMessageContext(WSDL2Constants.MESSAGE_LABEL_IN);
+ if (responseMsgCtx == null) {
+ // to support Sandesha.. however, this means that we
received a 202 accepted
+ // for an out-only , for which we do not need a dummy
message anyway
+ return;
+ }
responseMsgCtx.setServerSide(true);
responseMsgCtx.setDoingREST(outMsgCtx.isDoingREST());
responseMsgCtx.setProperty(MessageContext.TRANSPORT_IN,
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
Tue May 8 21:42:12 2007
@@ -82,9 +82,21 @@
return;
}
- if (responseMsgCtx == null) {
- log.error("Error getting IN message context from the operation
context");
+ // this conditional block is to support Sandesha, as it uses an out-in
mep, but without
+ // creating the message context to write the response and adding it
into the operation
+ // context, as it may get a 202 accepted or 200. So if the operation
is complete ignore
+ // this message, else, create a new message context and handle this
+ if (responseMsgCtx == null &&
outMsgCtx.getOperationContext().isComplete()) {
+ log.debug("Error getting IN message context from the operation
context. " +
+ "Possibly an RM terminate sequence message");
+ return;
+
} else {
+ if (responseMsgCtx == null) {
+ responseMsgCtx = new MessageContext();
+
responseMsgCtx.setOperationContext(outMsgCtx.getOperationContext());
+ }
+
responseMsgCtx.setServerSide(true);
responseMsgCtx.setDoingREST(outMsgCtx.isDoingREST());
responseMsgCtx.setProperty(MessageContext.TRANSPORT_IN, outMsgCtx
@@ -107,8 +119,6 @@
getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE));
responseMsgCtx.setOperationContext(outMsgCtx.getOperationContext());
responseMsgCtx.setConfigurationContext(outMsgCtx.getConfigurationContext());
- //responseMsgCtx.getOptions().setRelationships(
- // new RelatesTo[] { new RelatesTo(outMsgCtx.getMessageID()) });
responseMsgCtx.setTo(null);
}
}
@@ -117,6 +127,12 @@
* Process the received response through Axis2
*/
public void run() {
+ // to support Sandesha.. if there isn't a response message context, we
cannot read any
+ // response and populate it with the soap envelope
+ if (responseMsgCtx == null) {
+ return;
+ }
+
SOAPEnvelope envelope = null;
try {
String contentType =
response.getFirstHeader(HTTP.CONTENT_TYPE).getValue();
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java?view=diff&rev=536414&r1=536413&r2=536414
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
Tue May 8 21:42:12 2007
@@ -65,6 +65,7 @@
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
+import org.apache.sandesha2.Sandesha2Constants;
/**
* NIO transport sender for Axis2 based on HttpCore and NIO extensions
@@ -312,7 +313,9 @@
// if this is a dummy message to handle http 202 case with
non-blocking IO
// set the status code to 202 and the message body to an empty byte
array (see below)
- if (Utils.isExplicitlyTrue(msgContext, NhttpConstants.SC_ACCEPTED)) {
+ if (Utils.isExplicitlyTrue(msgContext, NhttpConstants.SC_ACCEPTED) &&
+ msgContext.getProperty(
+ Sandesha2Constants.MessageContextProperties.SEQUENCE_ID)
== null) {
response.setStatusCode(HttpStatus.SC_ACCEPTED);
}
@@ -332,11 +335,13 @@
OutputStream out = worker.getOutputStream();
try {
- if (!Utils.isExplicitlyTrue(msgContext,
NhttpConstants.SC_ACCEPTED)) {
- messageFormatter.writeTo(msgContext, format, out, true);
- } else {
+ if (Utils.isExplicitlyTrue(msgContext, NhttpConstants.SC_ACCEPTED)
&&
+ msgContext.getProperty(
+ Sandesha2Constants.MessageContextProperties.SEQUENCE_ID)
== null) {
// see comment above on the reasoning
out.write(new byte[0]);
+ } else {
+ messageFormatter.writeTo(msgContext, format, out, true);
}
out.close();
} catch (IOException e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]