Author: ningjiang Date: Thu May 14 06:46:16 2009 New Revision: 774658 URL: http://svn.apache.org/viewvc?rev=774658&view=rev Log: CAMEL-1609 Better fixing the issue of Content type setting for HTTP producer
Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java?rev=774658&r1=774657&r2=774658&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java Thu May 14 06:46:16 2009 @@ -20,6 +20,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.util.Enumeration; +import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; @@ -50,7 +52,40 @@ public void readRequest(HttpServletRequest request, HttpMessage message) { // lets force a parse of the body and headers message.getBody(); - message.getHeaders(); + // populate the headers from the request + Map<String, Object> headers = message.getHeaders(); + + //apply the headerFilterStrategy + Enumeration names = request.getHeaderNames(); + while (names.hasMoreElements()) { + String name = (String)names.nextElement(); + Object value = request.getHeader(name); + if (headerFilterStrategy != null + && !headerFilterStrategy.applyFilterToExternalHeaders(name, value, message.getExchange())) { + headers.put(name, value); + } + } + + //if the request method is Get, we also populate the http request parameters + if (request.getMethod().equalsIgnoreCase("GET")) { + names = request.getParameterNames(); + while (names.hasMoreElements()) { + String name = (String)names.nextElement(); + Object value = request.getParameter(name); + if (headerFilterStrategy != null + && !headerFilterStrategy.applyFilterToExternalHeaders(name, value, message.getExchange())) { + headers.put(name, value); + } + } + } + + // store the method and query and other info in headers + headers.put(HttpConstants.HTTP_METHOD, request.getMethod()); + headers.put(HttpConstants.HTTP_QUERY, request.getQueryString()); + headers.put(HttpConstants.HTTP_PATH, request.getPathInfo()); + headers.put(HttpConstants.HTTP_CONTENT_TYPE, request.getContentType()); + headers.put(HttpConstants.HTTP_CHARACTER_ENCODING, request.getCharacterEncoding()); + } public void writeResponse(HttpExchange exchange, HttpServletResponse response) throws IOException { Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java?rev=774658&r1=774657&r2=774658&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java Thu May 14 06:46:16 2009 @@ -28,7 +28,8 @@ } protected void initialize() { - getOutFilter().add("content-length"); + getOutFilter().add("content-length"); + getOutFilter().add("content-type"); getOutFilter().add(HttpConstants.HTTP_METHOD.toLowerCase()); getOutFilter().add(HttpConstants.HTTP_QUERY); getOutFilter().add(HttpConstants.HTTP_RESPONSE_CODE.toLowerCase()); Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=774658&r1=774657&r2=774658&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java Thu May 14 06:46:16 2009 @@ -27,6 +27,8 @@ import org.apache.camel.converter.stream.CachedOutputStream; import org.apache.camel.impl.DefaultProducer; import org.apache.camel.spi.HeaderFilterStrategy; +import org.apache.camel.util.ExchangeHelper; +import org.apache.camel.util.MessageHelper; import org.apache.camel.util.ObjectHelper; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; @@ -220,6 +222,9 @@ } if (methodToUse.isEntityEnclosing()) { ((EntityEnclosingMethod)method).setRequestEntity(requestEntity); + if (requestEntity.getContentType() == null) { + LOG.warn("Missing the ContentType in the request entity!"); + } } return method; @@ -237,12 +242,12 @@ return null; } - RequestEntity answer = in.getBody(RequestEntity.class); + RequestEntity answer = in.getBody(RequestEntity.class); if (answer == null) { try { String data = in.getBody(String.class); if (data != null) { - String contentType = in.getHeader("Content-Type", String.class); + String contentType = ExchangeHelper.getContentType(exchange); String charset = exchange.getProperty(Exchange.CHARSET_NAME, String.class); answer = new StringRequestEntity(data, contentType, charset); } @@ -250,7 +255,6 @@ throw new RuntimeCamelException(e); } } - return answer; } Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java?rev=774658&r1=774657&r2=774658&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java Thu May 14 06:46:16 2009 @@ -22,6 +22,7 @@ import org.apache.camel.Converter; import org.apache.camel.Exchange; import org.apache.camel.component.http.helper.GZIPHelper; +import org.apache.camel.util.ExchangeHelper; import org.apache.commons.httpclient.methods.InputStreamRequestEntity; import org.apache.commons.httpclient.methods.RequestEntity; @@ -36,7 +37,7 @@ return new InputStreamRequestEntity( GZIPHelper.toGZIPInputStreamIfRequested( exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class), - buffer.array())); + buffer.array()), ExchangeHelper.getContentType(exchange)); } @Converter @@ -44,7 +45,7 @@ return new InputStreamRequestEntity( GZIPHelper.toGZIPInputStreamIfRequested( exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class), - array)); + array), ExchangeHelper.getContentType(exchange)); } @Converter @@ -52,16 +53,21 @@ return new InputStreamRequestEntity( GZIPHelper.getGZIPWrappedInputStream( exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class), - inStream)); + inStream), ExchangeHelper.getContentType(exchange)); } @Converter public RequestEntity toRequestEntity(String str, Exchange exchange) throws Exception { - return new InputStreamRequestEntity( + if (GZIPHelper.containsGzip(exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class))) { + return new InputStreamRequestEntity( GZIPHelper.toGZIPInputStreamIfRequested( exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class), - str.getBytes())); + str.getBytes()), ExchangeHelper.getContentType(exchange)); + } else { + // will use the default StringRequestEntity + return null; + } } Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java?rev=774658&r1=774657&r2=774658&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java Thu May 14 06:46:16 2009 @@ -124,7 +124,7 @@ return compressed; } - private static boolean containsGzip(String str) { + public static boolean containsGzip(String str) { return str != null && str.toLowerCase().indexOf(GZIP) >= 0; }