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
