hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Kalnichevski (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (HTTPCORE-438) Got a java.nio.charset.UnsupportedCharsetException error while the header value consist a charset binary
Date Sun, 04 Dec 2016 15:19:58 GMT

     [ https://issues.apache.org/jira/browse/HTTPCORE-438?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Oleg Kalnichevski resolved HTTPCORE-438.
----------------------------------------
    Resolution: Invalid

In the days of HC 2.x and HC 3.x we (as a project) used to add config parameters for each
and every little protocol quirk and protocol deviation until we had ended up with 30+ parameters
most which were of little use or relevance to the majority of our users.

There is nothing stopping you from implementing a custom {{HttpAsyncResponseConsumer}} to
handle whatever non-standard content your application has to deal with. However, to make things
easier for those who want more leniency when dealing with garbage in 'Content-Type' headers
I have added a protected {{AbstractAsyncResponseConsumer#getContentType}} method for customization
of Content-Type parsing / inference logic [1].

[1] https://github.com/apache/httpcore/commit/d48412ec26e9b888d993bf12eedefba9c11301cb

> Got a java.nio.charset.UnsupportedCharsetException error while the header value consist
a charset binary
> --------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCORE-438
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-438
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.4.5
>            Reporter: Nhan Thuan Nguyen
>
> Got a java.nio.charset.UnsupportedCharsetException error while the header value consist
a charset binary (see below). Since the method in org.apache.http.entity.ContentType.get()
is hard coded boolean value true for strict param, the method in org.apache.http.entity.ContentType.create()
throw the UnsupportedCharsetException.
> Can strict param be pass in from a system property, -Dorg.apache.http.entity.contenttype.strict=false?
If not set, then set it to true as default.
> Content-Type: image/jpeg; charset=binary; name="image_42Colk06m1oO0xfC"
> Caused by: java.nio.charset.UnsupportedCharsetException: binary
>         at java.nio.charset.Charset.forName(Charset.java:531)
>         at org.apache.http.entity.ContentType.create(ContentType.java:224)
>         at org.apache.http.entity.ContentType.create(ContentType.java:214)
>         at org.apache.http.entity.ContentType.get(ContentType.java:299)
>         at org.apache.http.entity.ContentType.getOrDefault(ContentType.java:346)
>         at org.apache.http.nio.protocol.AbstractAsyncResponseConsumer.responseReceived(AbstractAsyncResponseConsumer.java:130)
>         at org.apache.http.impl.nio.client.MainClientExec.responseReceived(MainClientExec.java:315)
>         at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseReceived(DefaultClientExchangeHandlerImpl.java:147)
>         at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.responseReceived(HttpAsyncRequestExecutor.java:303)
>         at org.apache.http.impl.nio.client.InternalRequestExecutor.responseReceived(InternalRequestExecutor.java:108)
>         at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:255)
>         at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
>         at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
>         at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:121)
>         at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
>         at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
>         at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
> public static ContentType get(
>             final HttpEntity entity) throws ParseException, UnsupportedCharsetException
{
>         if (entity == null) {
>             return null;
>         }
>         final Header header = entity.getContentType();
>         if (header != null) {
>             final HeaderElement[] elements = header.getElements();
>             if (elements.length > 0) {
>                 return create(elements[0], true);
>             }
>         }
>         return null;
>     }
> private static ContentType create(final String mimeType, final NameValuePair[] params,
final boolean strict) {
>         Charset charset = null;
>         for (final NameValuePair param: params) {
>             if (param.getName().equalsIgnoreCase("charset")) {
>                 final String s = param.getValue();
>                 if (!TextUtils.isBlank(s)) {
>                     try {
>                         charset =  Charset.forName(s);
>                     } catch (final UnsupportedCharsetException ex) {
>                         if (strict) {
>                             throw ex;
>                         }
>                     }
>                 }
>                 break;
>             }
>         }
>         return new ContentType(mimeType, charset, params != null && params.length
> 0 ? params : null);
>     }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message