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()) {