You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ra...@apache.org on 2016/06/07 13:13:32 UTC

svn commit: r1747219 - in /synapse/trunk/java/modules: core/src/main/java/org/apache/synapse/core/axis2/ transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/

Author: ravi
Date: Tue Jun  7 13:13:32 2016
New Revision: 1747219

URL: http://svn.apache.org/viewvc?rev=1747219&view=rev
Log:
Patch by Isuru Janith Ranawaka that fixes send mediator inside a fault mediator from hanging when SSL exception occurs. SYNAPSE-1039

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/Pipe.java

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=1747219&r1=1747218&r2=1747219&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 Jun  7 13:13:32 2016
@@ -33,6 +33,7 @@ import org.apache.axis2.transport.http.H
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.nio.NHttpServerConnection;
 import org.apache.synapse.FaultHandler;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
@@ -45,6 +46,9 @@ import org.apache.synapse.config.Synapse
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.dispatch.Dispatcher;
 import org.apache.synapse.transport.nhttp.NhttpConstants;
+import org.apache.synapse.transport.passthru.PassThroughConstants;
+import org.apache.synapse.transport.passthru.Pipe;
+import org.apache.synapse.transport.passthru.config.SourceConfiguration;
 import org.apache.synapse.util.ResponseAcceptEncodingProcessor;
 
 import java.util.*;
@@ -249,6 +253,19 @@ public class SynapseCallbackReceiver imp
         Object o = response.getProperty(SynapseConstants.SENDING_FAULT);
         if (o != null && Boolean.TRUE.equals(o)) {
 
+            Pipe pipe = (Pipe) ((Axis2MessageContext) synapseOutMsgCtx).getAxis2MessageContext()
+                    .getProperty(PassThroughConstants.PASS_THROUGH_PIPE);
+            if (pipe != null && pipe.isSerializationComplete()) {
+                NHttpServerConnection conn = (NHttpServerConnection) ((Axis2MessageContext) synapseOutMsgCtx).
+                        getAxis2MessageContext().getProperty(PassThroughConstants.PASS_THROUGH_SOURCE_CONNECTION);
+                SourceConfiguration sourceConfiguration = (SourceConfiguration) ((Axis2MessageContext) synapseOutMsgCtx)
+                        .getAxis2MessageContext().getProperty(PassThroughConstants.PASS_THROUGH_SOURCE_CONFIGURATION);
+                Pipe newPipe = new Pipe(conn, sourceConfiguration.getBufferFactory().getBuffer(),
+                        PassThroughConstants.SOURCE, sourceConfiguration);
+                ((Axis2MessageContext) synapseOutMsgCtx).getAxis2MessageContext()
+                        .setProperty(PassThroughConstants.PASS_THROUGH_PIPE, newPipe);
+            }
+
             StatisticsReporter.reportFaultForAll(synapseOutMsgCtx,
                     ErrorLogFactory.createErrorLog(response));
             // there is a sending fault. propagate the fault to fault handlers.

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java?rev=1747219&r1=1747218&r2=1747219&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java Tue Jun  7 13:13:32 2016
@@ -74,9 +74,9 @@ public class PassThroughConstants {
 
     protected static final String PASS_THROUGH_TRANSPORT_WORKER_POOL =
             "PASS_THROUGH_TRANSPORT_WORKER_POOL";
-    protected static final String PASS_THROUGH_SOURCE_CONFIGURATION =
+    public static final String PASS_THROUGH_SOURCE_CONFIGURATION =
             "PASS_THROUGH_SOURCE_CONFIGURATION";
-    protected static final String PASS_THROUGH_SOURCE_CONNECTION = "pass-through.Source-Connection";
+    public static final String PASS_THROUGH_SOURCE_CONNECTION = "pass-through.Source-Connection";
     protected static final String PASS_THROUGH_SOURCE_REQUEST = "pass-through.Source-Request";
 
     protected static final String PASS_THROUGH_TARGET_CONNECTION = "pass-through.Target-Connection";
@@ -138,4 +138,7 @@ public class PassThroughConstants {
     
     //Http method type constants to be used in synapse
     public static final String HTTP_HEAD = "HEAD";
+
+    //use to create source buffer in passthrough transport
+    public static final String SOURCE ="source";
 }

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/Pipe.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/Pipe.java?rev=1747219&r1=1747218&r2=1747219&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/Pipe.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/Pipe.java Tue Jun  7 13:13:32 2016
@@ -288,6 +288,10 @@ public class Pipe {
         return buffer;
     }
 
+    public synchronized boolean isSerializationComplete(){
+        return serializationComplete;
+    }
+
     private void setInputMode(ByteBuffer buffer, AtomicBoolean inputMode) {
         if (inputMode.compareAndSet(false, true)) {
             if (buffer.hasRemaining()) {