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