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