You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by as...@apache.org on 2009/06/15 17:23:38 UTC

svn commit: r784810 - in /synapse/trunk/java: modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ repository/conf/ src/site/apt/

Author: asankha
Date: Mon Jun 15 15:23:38 2009
New Revision: 784810

URL: http://svn.apache.org/viewvc?rev=784810&view=rev
Log:
apply patch for SYNAPSE-534 from Eric H.

Modified:
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
    synapse/trunk/java/repository/conf/axis2.xml
    synapse/trunk/java/src/site/apt/transports.apt

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java?rev=784810&r1=784809&r2=784810&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientHandler.java Mon Jun 15 15:23:38 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) {
@@ -658,6 +666,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 : " +
@@ -701,6 +717,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: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=784810&r1=784809&r2=784810&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java Mon Jun 15 15:23:38 2009
@@ -143,6 +143,12 @@
                     + proxyHost + ":" + proxyPort + " bypassing : " + Arrays.toString(proxyBypassList));
             }
         }
+        
+        Parameter param = transportOut.getParameter("warnOnHTTP500");
+        if (param != null) {
+            String[] warnOnHttp500 = ((String) param.getValue()).split("\\|");
+            cfgCtx.setNonReplicableProperty("warnOnHTTP500", warnOnHttp500);
+        }
 
         HttpParams params = getClientParameters();
         try {

Modified: synapse/trunk/java/repository/conf/axis2.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/axis2.xml?rev=784810&r1=784809&r2=784810&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/axis2.xml (original)
+++ synapse/trunk/java/repository/conf/axis2.xml Mon Jun 15 15:23:38 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>

Modified: synapse/trunk/java/src/site/apt/transports.apt
URL: http://svn.apache.org/viewvc/synapse/trunk/java/src/site/apt/transports.apt?rev=784810&r1=784809&r2=784810&view=diff
==============================================================================
--- synapse/trunk/java/src/site/apt/transports.apt (original)
+++ synapse/trunk/java/src/site/apt/transports.apt Mon Jun 15 15:23:38 2009
@@ -64,10 +64,12 @@
 
 <transportSender name="http"  class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender">
     <parameter name="non-blocking" locked="false">true</parameter>
+    <parameter name="warnOnHTTP500" locked="false">*</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>
@@ -134,6 +136,21 @@
 
 * {Transport sender parameters}
 
+  The following property can be used to control based on content-types whether the HTTP/HTTPS
+  sender shall output a warning for responses with HTTP status code 500.
+
+  [<<<warnOnHTTP500>>>] A list of content-types for which Synapse shall output a warning when 
+  receiving an HTTP 500 response (each value each seperated by a |).
+  By default Synapse outputs a warning for any HTTP 500 response, irrespective of the content-type.
+  Consequently, also for each SOAP fault a warning will be logged.
+  If only for specific content-types a warning shall be logged, please provide a |-separated 
+  list. To output the warning for messages which do not have a content-type set, please
+  use the value "none"!
+  
+  Example value: x-application/hessian|none
+
+  []
+
   The following properties can be used to configure the HTTP sender to use a proxy. They can
   be specified either as transport parameters in declared in <<<\<transportSender\>>>> or as
   system properties. 
@@ -150,7 +167,7 @@
   
   []
 
-  Note that the HTTPS sender has no proxy support yet.  
+  Note that the HTTPS sender has no proxy support yet.
   
   The following parameters are specific to the HTTP sender: