You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2009/12/01 11:17:26 UTC
svn commit: r885718 -
/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
Author: hiranya
Date: Tue Dec 1 10:17:26 2009
New Revision: 885718
URL: http://svn.apache.org/viewvc?rev=885718&view=rev
Log:
Fix for handling of the responses without a content-type header
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java?rev=885718&r1=885717&r2=885718&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ClientWorker.java Tue Dec 1 10:17:26 2009
@@ -152,65 +152,72 @@
return;
}
- SOAPEnvelope envelope = null;
try {
- Header cType = response.getFirstHeader(HTTP.CONTENT_TYPE);
- String contentType;
- if (cType != null) {
- // This is the most common case - Most of the time servers send the Content-Type
- contentType = cType.getValue();
- } else {
- // Server hasn't sent the header - Try to infer the content type
- contentType = inferContentType();
- }
+ if (in != null) {
+ Header cType = response.getFirstHeader(HTTP.CONTENT_TYPE);
+ String contentType;
+ if (cType != null) {
+ // This is the most common case - Most of the time servers send the Content-Type
+ contentType = cType.getValue();
+ } else {
+ // Server hasn't sent the header - Try to infer the content type
+ contentType = inferContentType();
+ }
- String charSetEnc = BuilderUtil.getCharSetEncoding(contentType);
- if (charSetEnc == null) {
- charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
- }
+ String charSetEnc = BuilderUtil.getCharSetEncoding(contentType);
+ if (charSetEnc == null) {
+ charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+ }
- responseMsgCtx.setProperty(
- Constants.Configuration.CHARACTER_SET_ENCODING,
- contentType.indexOf(HTTP.CHARSET_PARAM) > 0 ?
- charSetEnc : MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
- // workaround for Axis2 TransportUtils.createSOAPMessage() issue, where a response
- // of content type "text/xml" is thought to be REST if !MC.isServerSide(). This
- // question is still under debate and due to the timelines, I am commiting this
- // workaround as Axis2 1.2 is about to be released and Synapse 1.0
- responseMsgCtx.setServerSide(false);
- try {
- envelope = TransportUtils.createSOAPMessage(
- responseMsgCtx,
- HTTPTransportUtils.handleGZip(responseMsgCtx, in),
- contentType);
-
- } catch (OMException e) {
- // handle non SOAP and POX/REST payloads (probably text/html)
- String errorMessage = "Unexpected response received. HTTP response code : "
- + this.response.getStatusLine().getStatusCode() + " HTTP status : "
- + this.response.getStatusLine().getReasonPhrase() + " exception : "
- + e.getMessage();
-
- log.warn(errorMessage);
- if (log.isDebugEnabled()) {
- log.debug(errorMessage, e);
- log.debug("Creating the SOAPFault to be injected...");
+ responseMsgCtx.setProperty(
+ Constants.Configuration.CHARACTER_SET_ENCODING,
+ contentType.indexOf(HTTP.CHARSET_PARAM) > 0 ?
+ charSetEnc : MessageContext.DEFAULT_CHAR_SET_ENCODING);
+
+ // workaround for Axis2 TransportUtils.createSOAPMessage() issue, where a response
+ // of content type "text/xml" is thought to be REST if !MC.isServerSide(). This
+ // question is still under debate and due to the timelines, I am commiting this
+ // workaround as Axis2 1.2 is about to be released and Synapse 1.0
+ responseMsgCtx.setServerSide(false);
+ SOAPEnvelope envelope;
+ try {
+ envelope = TransportUtils.createSOAPMessage(
+ responseMsgCtx,
+ HTTPTransportUtils.handleGZip(responseMsgCtx, in),
+ contentType);
+
+ } catch (OMException e) {
+ // handle non SOAP and POX/REST payloads (probably text/html)
+ String errorMessage = "Unexpected response received. HTTP response code : "
+ + this.response.getStatusLine().getStatusCode() + " HTTP status : "
+ + this.response.getStatusLine().getReasonPhrase() + " exception : "
+ + e.getMessage();
+
+ log.warn(errorMessage);
+ if (log.isDebugEnabled()) {
+ log.debug(errorMessage, e);
+ log.debug("Creating the SOAPFault to be injected...");
+ }
+ SOAPFactory factory = new SOAP11Factory();
+ envelope = factory.getDefaultFaultEnvelope();
+ SOAPFaultDetail detail = factory.createSOAPFaultDetail();
+ detail.setText(errorMessage);
+ envelope.getBody().getFault().setDetail(detail);
+ SOAPFaultReason reason = factory.createSOAPFaultReason();
+ reason.setText(errorMessage);
+ envelope.getBody().getFault().setReason(reason);
+ SOAPFaultCode code = factory.createSOAPFaultCode();
+ code.setText(Integer.toString(this.response.getStatusLine().getStatusCode()));
+ envelope.getBody().getFault().setCode(code);
}
- SOAPFactory factory = new SOAP11Factory();
- envelope = factory.getDefaultFaultEnvelope();
- SOAPFaultDetail detail = factory.createSOAPFaultDetail();
- detail.setText(errorMessage);
- envelope.getBody().getFault().setDetail(detail);
- SOAPFaultReason reason = factory.createSOAPFaultReason();
- reason.setText(errorMessage);
- envelope.getBody().getFault().setReason(reason);
- SOAPFaultCode code = factory.createSOAPFaultCode();
- code.setText(Integer.toString(this.response.getStatusLine().getStatusCode()));
- envelope.getBody().getFault().setCode(code);
+ responseMsgCtx.setServerSide(true);
+ responseMsgCtx.setEnvelope(envelope);
+
+ } else {
+ // there is no response entity-body
+ responseMsgCtx.setProperty(NhttpConstants.NO_ENTITY_BODY, Boolean.TRUE);
+ responseMsgCtx.setEnvelope(new SOAP11Factory().getDefaultEnvelope());
}
- responseMsgCtx.setServerSide(true);
- responseMsgCtx.setEnvelope(envelope);
// copy the HTTP status code as a message context property with the key HTTP_SC to be
// used at the sender to set the propper status code when passing the message