Author: hiranya
Date: Mon Jul 15 20:00:52 2013
New Revision: 1503440

URL: http://svn.apache.org/r1503440
Log:
Building the message when switching from HTTP/S to a different transport. 
Applying the patch for SYNAPSE-937 with some improvements.

Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java?rev=1503440&r1=1503439&r2=1503440&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
 Mon Jul 15 20:00:52 2013
@@ -20,19 +20,19 @@
 package org.apache.synapse.core.axis2;
 
 import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.util.blob.OverflowBlob;
 import org.apache.axiom.util.UIDGenerator;
+import org.apache.axiom.util.blob.OverflowBlob;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.context.ServiceContext;
 import org.apache.axis2.description.InOutAxisOperation;
-import org.apache.axis2.description.TransportInDescription;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.*;
-import org.apache.synapse.rest.RESTRequestHandler;
-import org.apache.synapse.task.SynapseTaskManager;
-import org.apache.synapse.transport.passthru.util.RelayUtils;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.ServerContextInformation;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.SynapseException;
 import org.apache.synapse.aspects.statistics.StatisticsCollector;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.core.SynapseEnvironment;
@@ -41,6 +41,9 @@ import org.apache.synapse.endpoints.disp
 import org.apache.synapse.mediators.MediatorFaultHandler;
 import org.apache.synapse.mediators.MediatorWorker;
 import org.apache.synapse.mediators.base.SequenceMediator;
+import org.apache.synapse.rest.RESTRequestHandler;
+import org.apache.synapse.task.SynapseTaskManager;
+import org.apache.synapse.transport.passthru.util.RelayUtils;
 import org.apache.synapse.util.concurrent.SynapseThreadPool;
 import org.apache.synapse.util.xpath.ext.SynapseXpathFunctionContextProvider;
 import org.apache.synapse.util.xpath.ext.SynapseXpathVariableResolver;
@@ -256,19 +259,17 @@ public class Axis2SynapseEnvironment imp
      */
     public void send(EndpointDefinition endpoint, MessageContext synCtx) {
         if (synCtx.isResponse()) {
-
             if (endpoint != null) {
+                if (isTransportSwitching(synCtx, endpoint)) {
+                    buildMessage(synCtx);
+                }
                 Axis2Sender.sendOn(endpoint, synCtx);
             } else {
                 String proxyName = (String) 
synCtx.getProperty(SynapseConstants.PROXY_SERVICE);
                 if (proxyName != null) {
                     ProxyService proxyService = 
synapseConfig.getProxyService(proxyName);
                     if (proxyService.isModuleEngaged()) {
-                        try {
-                                RelayUtils.buildMessage(((Axis2MessageContext) 
synCtx).getAxis2MessageContext(),false);
-                        } catch (Exception e) {
-                            handleException("Error building message", e);
-                        }
+                        buildMessage(synCtx);
                     }
                 }
                 Axis2Sender.sendBack(synCtx);
@@ -286,17 +287,36 @@ public class Axis2SynapseEnvironment imp
 
             // This is only for stats collection
             synCtx.setProperty(SynapseConstants.SENDING_REQUEST, true);
-            if (endpoint == null) {
-                try {
-                       RelayUtils.buildMessage(((Axis2MessageContext) 
synCtx).getAxis2MessageContext(),false);
-                } catch (Exception e) {
-                    handleException("Error while building message", e);
-                }
+
+            if (endpoint == null || isTransportSwitching(synCtx, endpoint)) {
+                buildMessage(synCtx);
             }
             Axis2Sender.sendOn(endpoint, synCtx);
         }
     }
 
+    private boolean isTransportSwitching(MessageContext synCtx, 
EndpointDefinition endpoint) {
+        if (endpoint.getAddress() != null) {
+            // If the message is sent to an explicit non-HTTP endpoint, build 
the message
+            return !endpoint.getAddress().startsWith("http");
+        } else {
+            String address = synCtx.getTo().getAddress();
+            if (address != null) {
+                // If the message is sent to an implicit non-HTTP endpoint, 
build the message
+                return !address.startsWith("http");
+            }
+        }
+        return false;
+    }
+
+    private void buildMessage(MessageContext synCtx) {
+        try {
+            RelayUtils.buildMessage(((Axis2MessageContext) 
synCtx).getAxis2MessageContext(), false);
+        } catch (Exception e) {
+            handleException("Error while building message", e);
+        }
+    }
+
     /**
      * This method will be used to create a new MessageContext in the Axis2 
environment for
      * Synapse. This will set all the relevant parts to the MessageContext, 
but for this message


Reply via email to