[HTTPCLIENT-2124] NullPointerException in MinimalHttpClient.doExecute(HttpHost, ClassicHttpRequest, HttpContext) (#261)
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java
index 0092cf4..a42ae48 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestMinimalClientRequestExecution.java
@@ -32,6 +32,7 @@
import java.util.Set;
import org.apache.hc.client5.http.classic.methods.HttpGet;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.http.ClassicHttpRequest;
@@ -71,7 +72,7 @@
}
@Test
- public void testNonCompliantURI() throws Exception {
+ public void testNonCompliantURIWithContext() throws Exception {
this.server.registerHandler("*", new SimpleService());
this.httpclient = HttpClients.createMinimal();
final HttpHost target = start();
@@ -79,9 +80,10 @@
final HttpClientContext context = HttpClientContext.create();
for (int i = 0; i < 10; i++) {
final HttpGet request = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, request, context);
- EntityUtils.consume(response.getEntity());
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ try (final CloseableHttpResponse response = this.httpclient.execute(target, request, context)) {
+ EntityUtils.consume(response.getEntity());
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ }
final HttpRequest reqWrapper = context.getRequest();
Assert.assertNotNull(reqWrapper);
@@ -98,4 +100,19 @@
}
}
+ @Test
+ public void testNonCompliantURIWithoutContext() throws Exception {
+ this.server.registerHandler("*", new SimpleService());
+ this.httpclient = HttpClients.createMinimal();
+ final HttpHost target = start();
+
+ for (int i = 0; i < 10; i++) {
+ final HttpGet request = new HttpGet("/");
+ try (final CloseableHttpResponse response = this.httpclient.execute(target, request)) {
+ EntityUtils.consume(response.getEntity());
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ }
+ }
+ }
+
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/MinimalHttpClient.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/MinimalHttpClient.java
index adf259e..2144099 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/MinimalHttpClient.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/MinimalHttpClient.java
@@ -142,14 +142,14 @@
execRuntime.connectEndpoint(clientContext);
}
- context.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
- context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
+ clientContext.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
+ clientContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
- httpProcessor.process(request, request.getEntity(), context);
+ httpProcessor.process(request, request.getEntity(), clientContext);
final ClassicHttpResponse response = execRuntime.execute(exchangeId, request, clientContext);
- httpProcessor.process(response, response.getEntity(), context);
+ httpProcessor.process(response, response.getEntity(), clientContext);
- if (reuseStrategy.keepAlive(request, response, context)) {
+ if (reuseStrategy.keepAlive(request, response, clientContext)) {
execRuntime.markConnectionReusable(null, TimeValue.NEG_ONE_MILLISECOND);
} else {
execRuntime.markConnectionNonReusable();