[
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: [email protected]
For additional commands, e-mail: [email protected]