Author: ruwan
Date: Mon Jun 15 09:08:28 2009
New Revision: 39020
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=39020

Log:
Fixing an issue reported and contributed by Eric Hubert


Modified:
   
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
   
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
   branches/synapse/1.3-wso2v1/repository/conf/axis2.xml

Modified: 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java?rev=39020&r1=39019&r2=39020&view=diff
==============================================================================
--- 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
       (original)
+++ 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
       Mon Jun 15 09:08:28 2009
@@ -84,6 +84,9 @@
     /** the metrics collector */
     private MetricsCollector metrics = null;
 
+    /** Array of content types for which warnings are logged if HTTP status 
code is 500. */
+    private String[] warnOnHttp500;
+
     public static final String OUTGOING_MESSAGE_CONTEXT = 
"synapse.axis2_message_context";
     public static final String AXIS2_HTTP_REQUEST = 
"synapse.axis2-http-request";
 
@@ -118,6 +121,11 @@
             cfg.getClientKeepalive(),
             cfg.getClientQueueLen(),
             "Client Worker thread group", "HttpClientWorker");
+
+        Object contentTypeList = cfgCtx.getLocalProperty("warnOnHTTP500");
+        if (contentTypeList != null) {
+            warnOnHttp500 = (String[]) contentTypeList;
+        }
     }
 
     public void requestReady(final NHttpClientConnection conn) {
@@ -656,6 +664,14 @@
                 processResponse(conn, context, response);
                 return;
             }
+            case HttpStatus.SC_INTERNAL_SERVER_ERROR: {
+                if (warnOnHttp500(response)) {
+                    log.warn(getErrorMessage("Received an internal server 
error : "
+                        + response.getStatusLine().getReasonPhrase(), conn));
+                }
+                processResponse(conn, context, response);
+                return;
+            }
             default : {
                 if (log.isDebugEnabled()) {
                     log.debug(getErrorMessage("HTTP status code received : " + 
               
@@ -699,6 +715,48 @@
     }
 
     /**
+     * Checks whether the provided 500 response shall be logged as a warning.
+     * The behavior can be configured based on the content type of the message 
via a transport
+     * parameter in axis2.xml named <code>warnOnHTTP500</code>.
+     *
+     * @param response an http 500 response
+     *
+     * @return true, if a warning shall be logged, otherwise false
+     */
+    private boolean warnOnHttp500(final HttpResponse response) {
+        if (warnOnHttp500 == null || warnOnHttp500.length == 0) {
+            return true;
+        }
+
+        for (String contentType : warnOnHttp500) {
+            if (contentType == null || contentType.trim().equals("*")) {
+                return true;
+            }
+        }
+
+        // determine content type of the response message
+        Header contentTypeHeader = response.getFirstHeader(CONTENT_TYPE);
+        String messageContentType;
+        if (contentTypeHeader == null) {
+            messageContentType = "none";
+        } else {
+            messageContentType = contentTypeHeader.getValue();
+            if (messageContentType == null || 
messageContentType.trim().length() == 0) {
+                messageContentType = "none";
+            }
+        }
+
+        // test if one of the content types matches
+        for (String contentType : warnOnHttp500) {
+            if (messageContentType.startsWith(contentType)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Perform processing of the received response though Axis2
      *
      * @param conn HTTP connection to be processed

Modified: 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=39020&r1=39019&r2=39020&view=diff
==============================================================================
--- 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
   (original)
+++ 
branches/synapse/1.3-wso2v1/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
   Mon Jun 15 09:08:28 2009
@@ -144,6 +144,12 @@
             }
         }
 
+        Parameter param = transportOut.getParameter("warnOnHTTP500");
+        if (param != null) {
+            String[] warnOnHttp500 = ((String) param.getValue()).split("\\|");
+            cfgCtx.setNonReplicableProperty("warnOnHTTP500", warnOnHttp500);
+        }
+
         HttpParams params = getClientParameters();
         try {
             String prefix = (sslContext == null ? "http" : "https") + "-Sender 
I/O dispatcher";

Modified: branches/synapse/1.3-wso2v1/repository/conf/axis2.xml
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/repository/conf/axis2.xml?rev=39020&r1=39019&r2=39020&view=diff
==============================================================================
--- branches/synapse/1.3-wso2v1/repository/conf/axis2.xml       (original)
+++ branches/synapse/1.3-wso2v1/repository/conf/axis2.xml       Mon Jun 15 
09:08:28 2009
@@ -222,12 +222,14 @@
 
     <transportSender name="http"  
class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender">
         <parameter name="non-blocking" locked="false">true</parameter>
+        <parameter name="warnOnHTTP500" locked="false">*</parameter>
         <!--parameter name="http.proxyHost" 
locked="false">localhost</parameter>
         <parameter name="http.proxyPort" locked="false">3128</parameter>
         <parameter name="http.nonProxyHosts" 
locked="false">localhost|moon|sun</parameter-->
     </transportSender>
     <transportSender name="https" 
class="org.apache.synapse.transport.nhttp.HttpCoreNIOSSLSender">
         <parameter name="non-blocking" locked="false">true</parameter>
+        <parameter name="warnOnHTTP500" locked="false">*</parameter>
         <parameter name="keystore" locked="false">
             <KeyStore>
                 <Location>lib/identity.jks</Location>

_______________________________________________
Esb-java-dev mailing list
[email protected]
https://wso2.org/cgi-bin/mailman/listinfo/esb-java-dev

Reply via email to