camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fried Hoeben (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CAMEL-6187) http4 component should default to charset based on content type
Date Wed, 20 Mar 2013 12:03:16 GMT
Fried Hoeben created CAMEL-6187:
-----------------------------------

             Summary: http4 component should default to charset based on content type
                 Key: CAMEL-6187
                 URL: https://issues.apache.org/jira/browse/CAMEL-6187
             Project: Camel
          Issue Type: Bug
          Components: camel-http
    Affects Versions: 2.10.4
            Reporter: Fried Hoeben


HttpProducer determines the charset of an outgoing StringEntity based on an Exchange property
(Exchange.CHARSET_NAME), using null if that property is not set. It also sets the content-type
based on the content-type of the camel message (this may also contain a character encoding).

If these two don't match the receiver of the http request will probably not be able to parse
the message. 

It would be better if the charset of the StringEntity would by default match the charset specified
in the content-type. Matching these two is done when receiving response messages (in HttpProducer.extractResponseBody())...

Suggested fix (in HttpProducer.createRequestEntity()), you could of course also do something
like org.apache.camel.component.http4.helper.HttpHelper.setCharsetFromContentType() but my
approach uses org.apache.http.entity.ContentType and java.nio.charset.Charset instead of trying
to determine the correct charset itself):

{code}
// be a bit careful with String as any type can most likely be converted to String
// so we only do an instanceof check and accept String if the body is really a String
// do not fallback to use the default charset as it can influence the request
// (for example application/x-www-form-urlencoded forms being sent)
String charset = IOHelper.getCharsetName(exchange, false);
if (charset == null && contentType != null)
{
    ContentType ct = ContentType.parse(contentType);
    if (ct != null) {
        Charset cs = ct.getCharset();
        if (cs != null)
        {
            charset = cs.name();
        }
    }
}
StringEntity entity = new StringEntity((String) data, charset);
entity.setContentType(contentType);
answer = entity;
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message