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: