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);