You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2008/04/15 15:51:20 UTC
svn commit: r648253 - in /synapse/trunk/java/modules:
core/src/main/java/org/apache/synapse/core/axis2/
transports/src/main/java/org/apache/synapse/transport/nhttp/
Author: ruwan
Date: Tue Apr 15 06:51:15 2008
New Revision: 648253
URL: http://svn.apache.org/viewvc?rev=648253&view=rev
Log:
Fixing the issue SYNAPSE-269, now you can configure synapse to invoke the actuall service over dual channel using the separateListener attribute of the enableAddressing element of the endpoint.
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/DynamicAxisOperation.java Tue Apr 15 06:51:15 2008
@@ -21,6 +21,7 @@
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
@@ -37,6 +38,7 @@
import org.apache.axis2.util.TargetResolver;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.transport.nhttp.NhttpConstants;
import javax.xml.namespace.QName;
@@ -123,8 +125,8 @@
outMsgCtx.setTransportOut(transportOut);
if (options.getTransportIn() == null && outMsgCtx.getTransportIn() == null) {
- outMsgCtx.setTransportIn(
- ClientUtils.inferInTransport(cfgCtx.getAxisConfiguration(), options, outMsgCtx));
+ outMsgCtx.setTransportIn(ClientUtils.inferInTransport(
+ cfgCtx.getAxisConfiguration(), options, outMsgCtx));
} else if (outMsgCtx.getTransportIn() == null) {
outMsgCtx.setTransportIn(options.getTransportIn());
}
@@ -134,41 +136,36 @@
if (options.isUseSeparateListener()) {
- /* TODO - review and finalise this - asankha 22 feb 2007
- // options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setTransportIn(outMsgCtx.getConfigurationContext()
- .getAxisConfiguration().getTransportIn(
- new QName(Constants.TRANSPORT_HTTP)));
+ .getAxisConfiguration().getTransportIn(Constants.TRANSPORT_HTTP));
- SynapseCallbackReceiver callbackReceiver = (SynapseCallbackReceiver) axisOp
- .getMessageReceiver();
- callbackReceiver.addCallback(outMsgCtx.getMessageID(), callback);
- EndpointReference replyToFromTransport = outMsgCtx
- .getConfigurationContext().getListenerManager()
- .getEPRforService(sc.getAxisService().getKey(),
- axisOp.getKey().getLocalPart(),
- outMsgCtx.getTransportOut().getKey().getLocalPart());
+ SynapseCallbackReceiver callbackReceiver =
+ (SynapseCallbackReceiver) axisOp.getMessageReceiver();
+
+ ((Axis2MessageContext)((AsyncCallback)
+ axisCallback).getSynapseOutMsgCtx()).getAxis2MessageContext().setProperty(
+ NhttpConstants.IGNORE_SC_ACCEPTED, Constants.VALUE_TRUE);
+ callbackReceiver.addCallback(outMsgCtx.getMessageID(), axisCallback);
+
+ EndpointReference replyToFromTransport = outMsgCtx.getConfigurationContext()
+ .getListenerManager().getEPRforService(sc.getAxisService().getName(),
+ axisOp.getName().getLocalPart(), outMsgCtx.getTransportOut().getName());
if (outMsgCtx.getReplyTo() == null) {
outMsgCtx.setReplyTo(replyToFromTransport);
} else {
- outMsgCtx.getReplyTo().setAddress(
- replyToFromTransport.getAddress());
+ outMsgCtx.getReplyTo().setAddress(replyToFromTransport.getAddress());
}
- // if dont do this , this guy will wait till its gets HTTP 202
- // in the case
- // HTTP
- outMsgCtx.addFeature(MessageContext.TRANSPORT_NON_BLOCKING,
- Boolean.TRUE);
- AxisEngine engine = new AxisEngine(cfgCtx);
+
+ outMsgCtx.setProperty(NhttpConstants.IGNORE_SC_ACCEPTED, Constants.VALUE_TRUE);
outMsgCtx.getConfigurationContext().registerOperationContext(
outMsgCtx.getMessageID(), oc);
- engine.send(outMsgCtx);
+
+ AxisEngine.send(outMsgCtx);
// Options object reused so soapAction needs to be removed so
// that soapAction+wsa:Action on response don't conflict
options.setAction("");
- */
} else {
@@ -186,7 +183,8 @@
// envelope does not contain addressing headers
MessageContext responseMessageContext = new MessageContext();
responseMessageContext.setMessageID(msgctx.getMessageID());
- responseMessageContext.setProperty(SynapseConstants.RELATES_TO_FOR_POX, msgctx.getMessageID());
+ responseMessageContext.setProperty(
+ SynapseConstants.RELATES_TO_FOR_POX, msgctx.getMessageID());
responseMessageContext.setOptions(options);
addMessageContext(responseMessageContext);
@@ -240,7 +238,8 @@
sc.setTargetEPR(responseMessageContext.getReplyTo());
}
} else {
- throw new AxisFault(Messages.getMessage("blockingInvocationExpectsResponse"));
+ throw new AxisFault(
+ Messages.getMessage("blockingInvocationExpectsResponse"));
}
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Tue Apr 15 06:51:15 2008
@@ -23,7 +23,10 @@
import org.apache.axiom.soap.SOAPFault;
import org.apache.axiom.soap.SOAPFaultReason;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
+import org.apache.axis2.transport.RequestResponseTransport;
import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.AddressingHelper;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
import org.apache.axis2.client.Options;
@@ -265,6 +268,10 @@
response.setReplyTo(axisOutMsgCtx.getReplyTo());
response.setFaultTo(axisOutMsgCtx.getFaultTo());
+
+ if (axisOutMsgCtx.isPropertyTrue(NhttpConstants.IGNORE_SC_ACCEPTED)) {
+ response.setProperty(NhttpConstants.FORCE_SC_ACCEPTED, Constants.VALUE_TRUE);
+ }
// create the synapse message context for the response
Axis2MessageContext synapseInMessageContext =
Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java Tue Apr 15 06:51:15 2008
@@ -406,7 +406,8 @@
try {
MessageContext responseMsgCtx = outMsgCtx.getOperationContext().
getMessageContext(WSDL2Constants.MESSAGE_LABEL_IN);
- if (responseMsgCtx == null) {
+ if (responseMsgCtx == null
+ || outMsgCtx.getOperationContext().isComplete()) {
// 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
Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java Tue Apr 15 06:51:15 2008
@@ -40,6 +40,7 @@
import org.apache.axis2.util.Utils;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.addressing.AddressingHelper;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.TransportOutDescription;
@@ -243,6 +244,12 @@
// remove unwanted HTTP headers (if any from the current message)
removeUnwantedHeaders(msgContext);
+ if (AddressingHelper.isReplyRedirected(msgContext)
+ && !msgContext.getReplyTo().hasNoneAddress()) {
+
+ msgContext.setProperty(NhttpConstants.IGNORE_SC_ACCEPTED, Constants.VALUE_TRUE);
+ }
+
EndpointReference epr = NhttpUtils.getDestinationEPR(msgContext);
if (epr != null) {
if (!AddressingConstants.Final.WSA_NONE_URI.equals(epr.getAddress())) {
@@ -251,6 +258,7 @@
handleException("Cannot send message to " + AddressingConstants.Final.WSA_NONE_URI);
}
} else {
+
if (msgContext.getProperty(Constants.OUT_TRANSPORT_INFO) != null) {
if (msgContext.getProperty(Constants.OUT_TRANSPORT_INFO) instanceof ServerWorker) {
sendAsyncResponse(msgContext);
Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java Tue Apr 15 06:51:15 2008
@@ -25,6 +25,7 @@
public static final String SENDING_FAULT = "sending_fault";
public static final String FORCE_HTTP_1_0 = "FORCE_HTTP_1.0";
public static final String IGNORE_SC_ACCEPTED = "IGNORE_SC_ACCEPTED";
+ public static final String FORCE_SC_ACCEPTED = "FORCE_SC_ACCEPTED";
public static final String WSDL_EPR_PREFIX = "WSDLEPRPrefix";
public static final String REMOTE_HOST ="REMOTE_HOST";
Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java?rev=648253&r1=648252&r2=648253&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java Tue Apr 15 06:51:15 2008
@@ -196,7 +196,7 @@
handleException("Unsupported method : " + method, null);
}
- // here the RequestResponseTransport place an important role when it comes to
+ // here the RequestResponseTransport plays an important role when it comes to
// dual channel invocation. This is becasue we need to ACK to the request once the request
// is received to synapse. Otherwise we will not be able to support the single channel
// invocation within the actual service and synapse for a dual channel request from the
@@ -207,7 +207,8 @@
msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN)))
|| (((RequestResponseTransport) msgContext.getProperty(
RequestResponseTransport.TRANSPORT_CONTROL)).getStatus()
- == RequestResponseTransport.RequestResponseTransportStatus.ACKED))) {
+ == RequestResponseTransport.RequestResponseTransportStatus.ACKED)
+ || msgContext.isPropertyTrue(NhttpConstants.FORCE_SC_ACCEPTED))) {
response.setStatusCode(HttpStatus.SC_ACCEPTED);
serverHandler.commitResponse(conn, response);