You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/01/31 12:51:36 UTC
svn commit: r1065569 - in
/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp:
NhttpConstants.java ServerHandler.java ServerWorker.java
Author: supun
Date: Mon Jan 31 11:51:36 2011
New Revision: 1065569
URL: http://svn.apache.org/viewvc?rev=1065569&view=rev
Log:
fixing an issue with submitting 500 internal server erros, in some cases these erros were not submitted correctly and intermitently
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java?rev=1065569&r1=1065568&r2=1065569&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java Mon Jan 31 11:51:36 2011
@@ -132,4 +132,5 @@ public class NhttpConstants {
/** This constant is used to plugin a custom WSDL processor for Get requests*/
public static final String HTTP_GET_PROCESSOR = "httpGetProcessor";
+ public static final String FORCE_CONNECTION_CLOSE = "FORCE_CONNECTION_CLOSE";
}
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java?rev=1065569&r1=1065568&r2=1065569&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerHandler.java Mon Jan 31 11:51:36 2011
@@ -316,6 +316,8 @@ public class ServerHandler implements NH
Boolean reqRead = (Boolean) conn.getContext().getAttribute(
NhttpConstants.REQUEST_READ);
+ Boolean forceConnectionClose = (Boolean) conn.getContext().getAttribute(
+ NhttpConstants.FORCE_CONNECTION_CLOSE);
if (reqRead != null && !reqRead) {
try {
// this is a connection we should not re-use
@@ -323,6 +325,8 @@ public class ServerHandler implements NH
} catch (Exception ignore) {}
} else if (!connStrategy.keepAlive(response, context)) {
conn.close();
+ } else if (forceConnectionClose != null && forceConnectionClose) {
+ conn.close();
} else {
conn.requestInput();
}
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java?rev=1065569&r1=1065568&r2=1065569&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java Mon Jan 31 11:51:36 2011
@@ -475,33 +475,41 @@ public class ServerWorker implements Run
} else {
log.error(msg, e);
}
-
+ Exception newException = e;
if (e == null) {
- e = new Exception(msg);
+ newException = new Exception(msg);
}
try {
MessageContext faultContext = MessageContextBuilder.createFaultMessageContext(
- msgContext, e);
+ msgContext, newException);
AxisEngine.sendFault(faultContext);
} catch (Exception ex) {
response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
response.addHeader(CONTENT_TYPE, TEXT_XML);
+ conn.getContext().setAttribute(NhttpConstants.FORCE_CONNECTION_CLOSE, true);
serverHandler.commitResponseHideExceptions(conn, response);
try {
- os.write(msg.getBytes());
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException ignore) {}
+ }
+
+ String body = "<html><body><h1>" + "Failed to process the request" +
+ "</h1><p>"+ msg + "</p>";
+ if (e != null) {
+ body = body + "<p>"+ e.getMessage() + "</p></body></html>";
+ }
if (ex != null) {
- os.write(ex.getMessage().getBytes());
+ body = body + "<p>"+ ex.getMessage() + "</p></body></html>";
}
+ os.write(body.getBytes());
+ os.flush();
+ os.close();
} catch (IOException ignore) {}
-
- if (conn != null) {
- try {
- conn.shutdown();
- } catch (IOException ignore) {}
- }
}
}