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] [Commented] (HTTPCORE-437) NullPointerException in HeaderGroup.getHeaders
Date Wed, 26 Oct 2016 09:50:58 GMT

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

Oleg Kalnichevski commented on HTTPCORE-437:
--------------------------------------------

All {{Header}} implementations shipped with HttpCore ensure header name is non null. 

1. Please make message objects are not accessed (or at least not mutated) from multiple threads.
Those objects are not thread-safe by design. I _believe_ concurrent modification of {{ArrayList}}
may cause some of its elements become visible as null to some threads.
2. Are you using some byte code enhancers or obfuscaters?
3. Make sure you are using reasonably recent JRE version

Oleg

> NullPointerException in HeaderGroup.getHeaders
> ----------------------------------------------
>
>                 Key: HTTPCORE-437
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-437
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.4.5
>            Reporter: Adam Michalik
>
> I'm using HttpClient in multithreaded environment with PoolingHttpClientConnectionManager.
Once in a while I get an exception whose root cause is
> {code}
>     Caused by: java.lang.NullPointerException: null
>         at org.apache.http.message.HeaderGroup.getHeaders(HeaderGroup.java:182)
>         at org.apache.http.message.AbstractHttpMessage.getHeaders(AbstractHttpMessage.java:73)
>         at org.apache.http.impl.client.DefaultClientConnectionReuseStrategy.keepAlive(DefaultClientConnectionReuseStrategy.java:51)
>         at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:274)
>         at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
>         at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
>         at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
>         at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
>         at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
>         at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:220)
>         at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
> {code}
> The {{getHeaders}} method is 
> {code:java}
>     public Header[] getHeaders(final String name) {
>         List<Header> headersFound = null;
>         for (int i = 0; i < this.headers.size(); i++) {
>             final Header header = this.headers.get(i);
>             if (header.getName().equalsIgnoreCase(name)) { // NPE HERE
>                 if (headersFound == null) {
>                     headersFound = new ArrayList<Header>();
>                 }
>                 headersFound.add(header);
>             }
>         }
>         return headersFound != null ? headersFound.toArray(new Header[headersFound.size()])
: EMPTY;
>     }
> {code}
> I looked around in the {{HeaderGroup}} class and I see that every modification to the
{{headers}} list has a null-check. Also, the {{BasicHeader}} and {{BufferedHeader}} have null-checks
so that {{name}} cannot be null. How can this be occurring?
> The issue happens on production, around 10 exceptions in the last 12 hours out of 1 000
000 requests done in total.



--
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