You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Fabricio Guimarães Pellegrini (JIRA)" <ji...@apache.org> on 2018/04/06 08:34:00 UTC

[jira] [Commented] (CAMEL-12424) HTTPHelper.setCharsetFromContentType can't properly extract the charset if it isn't the last parameter

    [ https://issues.apache.org/jira/browse/CAMEL-12424?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16428105#comment-16428105 ] 

Fabricio Guimarães Pellegrini commented on CAMEL-12424:
-------------------------------------------------------

This is the temporary patch that I made locally to fix the issue.

    @SuppressWarnings("deprecation")
    public static void setCharsetFromContentType(String contentType, Exchange exchange) {
        if (contentType != null) {
            String charset = getCharsetFromContentType(contentType);
            exchange.setProperty(Exchange.CHARSET_NAME, charset);
        }
    }

> HTTPHelper.setCharsetFromContentType can't properly extract the charset if it isn't the last parameter
> ------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-12424
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12424
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-http-common
>    Affects Versions: 2.19.2
>         Environment: Apache Camel 2.19.2
> Karaf 4.1.2
> JDK 1.8.0_161
>            Reporter: Fabricio Guimarães Pellegrini
>            Priority: Major
>              Labels: easyfix
>
> When our application recieves the Content-Type: application/json;charset=utf-8;profile="http://my.company.profile.errorSchema.4.json#", the HTTPHelper sets the wrong value for the Exchange.CHARSET_NAME in the Exchange.
> {quote} @SuppressWarnings("deprecation")
>      public static void setCharsetFromContentType(String contentType, Exchange exchange) {
>          if (contentType != null) {
>              // find the charset and set it to the Exchange
>              int index = contentType.indexOf("charset=");
>              if (index > 0) {
>                  String charset = contentType.substring(index + 8); //HERE IS THE PROBLEM                 exchange.setProperty(Exchange.CHARSET_NAME, IOConverter.normalizeCharset(charset));             }
>         }
>      }
> {quote}
> Because of that, when the HTTPProducer tries to load the body we get the following error:
> {quote}Exception: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.io.InputStream] due java.io.UnsupportedEncodingException: utf-8;profile="http://my.company.profile.errorSchema.4.json#
>  org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.io.InputStream] due java.io.UnsupportedEncodingException: utf-8;profile="http://my.company.profile.errorSchema.4.json#
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:629) [178:org.apache.camel.camel-core:2.19.2]
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:150) [178:org.apache.camel.camel-core:2.19.2]
>          at org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.java:120) [176:org.apache.camel.camel-blueprint:2.19.2]
>          at org.apache.camel.component.http4.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:305) [182:org.apache.camel.camel-http4:2.19.2]
>          at org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:207) [182:org.apache.camel.camel-http4:2.19.2]
> Caused by: org.apache.camel.RuntimeCamelException: java.io.UnsupportedEncodingException: utf-8;profile="http://my.company.profile.errorSchema.4.json#
>          at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1774) ~[?:?]
>          at org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1355) ~[?:?]
>          at org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59) ~[?:?]
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:306) ~[?:?]
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:133) ~[?:?]
>          ... 70 more
>  Caused by: java.io.UnsupportedEncodingException: utf-8;profile="http://my.company.profile.errorSchema.4.json#
>          at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:71) ~[?:?]
>          at java.io.InputStreamReader.<init>(InputStreamReader.java:100) ~[?:?]
>          at org.apache.camel.converter.IOConverter.toReader(IOConverter.java:179) ~[?:?]
>          at org.apache.camel.converter.IOConverter.toString(IOConverter.java:364) ~[?:?]
>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
>          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
>          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
>          at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
>          at org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1351) ~[?:?]
>          at org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59) ~[?:?]
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:306) ~[?:?]
>          at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:133) ~[?:?]
> {quote}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)