Willem

Beware to do WARN logging in case it will log all the time
+                LOG.warn("Missing the ContentType in the request entity!");

Its quite often not to set a Content-Type using camel http to just do
a text/plain GET.
So be sure that the http client sets a Content-Type if the end user
have not provided anyone.

If the content-type is often null then consider changing the WARN to
DEBUG. And you could output the URI also so people looking in the log
can better known which HTTP call is the problem.



On Thu, May 14, 2009 at 8:46 AM,  <ningji...@apache.org> wrote:
> 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;
>     }
>
>
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus
Apache Camel Reference Card:
http://refcardz.dzone.com/refcardz/enterprise-integration
Interview with me:
http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress

Reply via email to