[
https://issues.apache.org/jira/browse/HTTPCORE-437?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Oleg Kalnichevski resolved HTTPCORE-437.
----------------------------------------
Resolution: Information Provided
Adam
While {{HttpContext}} instances are usually perfectly thread safe by themselves
but they may (and usually do) contain objects that are not thread safe.
Therefore one _must_ not share the same {{HttpContext}} for concurrent request
execution. So, it does look like a problem downstream.
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
> Environment: Oracle JDK 8u101 on Ubuntu 14.04
> 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]