Author: asankha
Date: Tue May  6 20:35:02 2008
New Revision: 653982

URL: http://svn.apache.org/viewvc?rev=653982&view=rev
Log:
fix for https://issues.apache.org/jira/browse/SYNAPSE-289

Modified:
    
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/ClientWorker.java
    
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/PipeImpl.java

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=653982&r1=653981&r2=653982&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 May  6 20:35:02 2008
@@ -201,7 +201,9 @@
 
         HttpContext context = conn.getContext();
         closeChannel((ReadableByteChannel) 
context.getAttribute(REQUEST_SOURCE_CHANNEL));
-        closeChannel((ReadableByteChannel) 
context.getAttribute(RESPONSE_SOURCE_CHANNEL));
+        // Note: We do not close the RESPONSE_SOURCE_CHANNEL at this point in 
time as its closed
+        // by the ClientWorker:run() in the finally block, after the response 
was processed
+        // fix for https://issues.apache.org/jira/browse/SYNAPSE-289
         closeChannel((WritableByteChannel) 
context.getAttribute(RESPONSE_SINK_CHANNEL));
         closeChannel((WritableByteChannel) 
context.getAttribute(REQUEST_SINK_CHANNEL));
         
@@ -568,7 +570,7 @@
 
             workerPool.execute(
                 new ClientWorker(cfgCtx, 
Channels.newInputStream(responsePipe.source()), response,
-                    (MessageContext) 
context.getAttribute(OUTGOING_MESSAGE_CONTEXT), metrics));
+                    (MessageContext) 
context.getAttribute(OUTGOING_MESSAGE_CONTEXT)));
 
         } catch (IOException e) {
             handleException("I/O Error : " + e.getMessage(), e, conn);

Modified: 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java?rev=653982&r1=653981&r2=653982&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
 (original)
+++ 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
 Tue May  6 20:35:02 2008
@@ -60,8 +60,6 @@
     private InputStream in = null;
     /** the HttpResponse received */
     private HttpResponse response = null;
-    /** the metrics collector */
-    private MetricsCollector metrics = null;
 
     /**
      * Create the thread that would process the response message received for 
the outgoing message
@@ -71,12 +69,11 @@
      * @param outMsgCtx the original outgoing message context (i.e. 
corresponding request)
      */
     public ClientWorker(ConfigurationContext cfgCtx, InputStream in,
-        HttpResponse response, MessageContext outMsgCtx, final 
MetricsCollector metrics) {
+        HttpResponse response, MessageContext outMsgCtx) {
 
         this.cfgCtx = cfgCtx;
         this.in = in;
         this.response = response;
-        this.metrics = metrics;
 
         try {
             responseMsgCtx = outMsgCtx.getOperationContext().
@@ -196,6 +193,14 @@
             responseMsgCtx.setProperty(NhttpConstants.HTTP_SC,
                     this.response.getStatusLine().getStatusCode());
 
+            // process response received
+            AxisEngine engine = new AxisEngine(cfgCtx);
+            try {
+                engine.receive(responseMsgCtx);
+            } catch (AxisFault af) {
+                log.error("Fault processing response message through Axis2", 
af);
+            }
+
         } catch (AxisFault af) {
             log.error("Fault creating response SOAP envelope", af);
             return;
@@ -203,20 +208,16 @@
             log.error("Error creating response SOAP envelope", e);
         } catch (IOException e) {
             log.error("Error closing input stream from which message was 
read", e);
-        }
 
-        AxisEngine engine = new AxisEngine(cfgCtx);
-        try {
-            engine.receive(responseMsgCtx);
-        } catch (AxisFault af) {
-            log.error("Fault processing response message through Axis2", af);
+        } finally {
+            // this is the guaranteed location to close the 
RESPONSE_SOURCE_CHANNEL that was used
+            // to read the response back from the server.
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ignore) {}
         }
-
-        try {
-            if (in != null) {
-                in.close();
-            }
-        } catch (IOException ignore) {}
     }
 
     // -------------- utility methods -------------

Modified: 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/PipeImpl.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/PipeImpl.java?rev=653982&r1=653981&r2=653982&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/PipeImpl.java
 (original)
+++ 
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/PipeImpl.java
 Tue May  6 20:35:02 2008
@@ -83,7 +83,7 @@
             try {
                 pipedOut = new PipedOutputStream(pipedIn);
             } catch (IOException e) {
-                e.printStackTrace();
+                log.error("Unable to create an in-memory Pipe");
             }
 
             source = Channels.newChannel(pipedIn);


Reply via email to