Hi Claus,
if (methodToUse.isEntityEnclosing()) {
((EntityEnclosingMethod)method).setRequestEntity(requestEntity);
if (requestEntity.getContentType() == null) {
LOG.warn("Missing the ContentType in the request entity!");
}
}
The Get method will be excluded, since there is no entity for Get method
. The code should be fine, and I will add the URI into the warning log.
Thanks,
Willem
Claus Ibsen wrote:
> 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, <[email protected]> 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;
>> }
>>
>>
>>
>>
>
>
>