diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestAsyncRedirects.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestAsyncRedirects.java index cacbef166..83c429eb4 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestAsyncRedirects.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestAsyncRedirects.java @@ -42,8 +42,6 @@ import org.apache.hc.client5.http.CircularRedirectException; import org.apache.hc.client5.http.RedirectException; import org.apache.hc.client5.http.async.methods.SimpleHttpRequest; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; -import org.apache.hc.client5.http.async.methods.SimpleRequestProducer; -import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.cookie.BasicCookieStore; import org.apache.hc.client5.http.cookie.CookieStore; @@ -455,9 +453,9 @@ public class TestAsyncRedirects extends IntegrationTestBase { .setCircularRedirectsAllowed(true) .setMaxRedirects(5).build(); try { - final Future future = httpclient.execute( - SimpleRequestProducer.create(SimpleHttpRequest.get(target, "/circular-oldlocation/"), config), - SimpleResponseConsumer.create(), null); + final SimpleHttpRequest request = SimpleHttpRequest.get(target, "/circular-oldlocation/"); + request.setConfig(config); + final Future future = httpclient.execute(request, null); future.get(); } catch (final ExecutionException e) { Assert.assertTrue(e.getCause() instanceof RedirectException); @@ -481,9 +479,9 @@ public class TestAsyncRedirects extends IntegrationTestBase { .setCircularRedirectsAllowed(false) .build(); try { - final Future future = httpclient.execute( - SimpleRequestProducer.create(SimpleHttpRequest.get(target, "/circular-oldlocation/"), config), - SimpleResponseConsumer.create(), null); + final SimpleHttpRequest request = SimpleHttpRequest.get(target, "/circular-oldlocation/"); + request.setConfig(config); + final Future future = httpclient.execute(request, null); future.get(); } catch (final ExecutionException e) { Assert.assertTrue(e.getCause() instanceof CircularRedirectException); diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestClientAuthentication.java index 606e66ae8..7841420b9 100644 --- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestClientAuthentication.java +++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestClientAuthentication.java @@ -35,8 +35,6 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.hc.client5.http.async.methods.SimpleHttpRequest; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; -import org.apache.hc.client5.http.async.methods.SimpleRequestProducer; -import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer; import org.apache.hc.client5.http.auth.AuthChallenge; import org.apache.hc.client5.http.auth.AuthScheme; import org.apache.hc.client5.http.auth.AuthSchemeProvider; @@ -45,7 +43,6 @@ import org.apache.hc.client5.http.auth.ChallengeType; import org.apache.hc.client5.http.auth.Credentials; import org.apache.hc.client5.http.auth.CredentialsStore; import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; -import org.apache.hc.client5.http.classic.methods.HttpGet; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.DefaultAuthenticationStrategy; import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; @@ -547,12 +544,9 @@ public class TestClientAuthentication extends IntegrationTestBase { context.setCredentialsProvider(credsProvider); for (int i = 0; i < 10; i++) { - final HttpGet httpget = new HttpGet("/"); - httpget.setConfig(config); - final Future future = httpclient.execute( - SimpleRequestProducer.create(SimpleHttpRequest.get(target, "/"), config), - SimpleResponseConsumer.create(), - context, null); + final SimpleHttpRequest request = SimpleHttpRequest.get(target, "/"); + request.setConfig(config); + final Future future = httpclient.execute(request, context, null); final SimpleHttpResponse response = future.get(); Assert.assertNotNull(response); Assert.assertEquals(HttpStatus.SC_OK, response.getCode()); diff --git a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientConnectionEviction.java b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientConnectionEviction.java index d9dc7246e..2c46a5801 100644 --- a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientConnectionEviction.java +++ b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientConnectionEviction.java @@ -66,7 +66,7 @@ public class AsyncClientConnectionEviction { final SimpleHttpRequest request = SimpleHttpRequest.get(target, "/"); final Future future1 = client.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback() { @@ -95,7 +95,7 @@ public class AsyncClientConnectionEviction { // Previous connection should get evicted from the pool by now final Future future2 = client.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback() { diff --git a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientCustomSSL.java b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientCustomSSL.java index a95867a40..bc86d501b 100644 --- a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientCustomSSL.java +++ b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientCustomSSL.java @@ -98,7 +98,7 @@ public class AsyncClientCustomSSL { final SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri); final Future future = client.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), clientContext, new FutureCallback() { diff --git a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp1Pipelining.java b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp1Pipelining.java index ccf204f75..9e10f30f0 100644 --- a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp1Pipelining.java +++ b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp1Pipelining.java @@ -69,7 +69,7 @@ public class AsyncClientHttp1Pipelining { for (final String requestUri: requestUris) { final SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri); endpoint.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback() { diff --git a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp2Multiplexing.java b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp2Multiplexing.java index 1c1bf96e1..f908461f5 100644 --- a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp2Multiplexing.java +++ b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientHttp2Multiplexing.java @@ -70,7 +70,7 @@ public class AsyncClientHttp2Multiplexing { for (final String requestUri: requestUris) { final SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri); endpoint.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback() { diff --git a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientTlsAlpn.java b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientTlsAlpn.java index 7898e1a0b..77bb55c35 100644 --- a/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientTlsAlpn.java +++ b/httpclient5/src/examples/org/apache/hc/client5/http/examples/AsyncClientTlsAlpn.java @@ -100,7 +100,7 @@ public class AsyncClientTlsAlpn { final SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri); final Future future = client.execute( - SimpleRequestProducer.create(request, null), + SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), clientContext, new FutureCallback() { diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java index 0ec948f06..c07a42e8f 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java @@ -43,11 +43,11 @@ import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.NameValuePair; import org.apache.hc.core5.http.ProtocolVersion; import org.apache.hc.core5.http.message.BasicHeader; -import org.apache.hc.core5.http.message.BasicHttpRequest; import org.apache.hc.core5.http.message.BasicNameValuePair; import org.apache.hc.core5.http.message.HeaderGroup; import org.apache.hc.core5.http.nio.AsyncEntityProducer; import org.apache.hc.core5.http.nio.AsyncRequestProducer; +import org.apache.hc.core5.http.nio.BasicRequestProducer; import org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer; import org.apache.hc.core5.http.nio.entity.StringAsyncEntityProducer; import org.apache.hc.core5.net.URIBuilder; @@ -429,16 +429,17 @@ public class AsyncRequestBuilder { } } } - final BasicHttpRequest request = host != null ? - new BasicHttpRequest(method, host, !TextUtils.isBlank(path) ? path : "/") : - new BasicHttpRequest(method, uri != null ? uri : URI.create("/")); + final ConfigurableHttpRequest request = host != null ? + new ConfigurableHttpRequest(method, host, !TextUtils.isBlank(path) ? path : "/") : + new ConfigurableHttpRequest(method, uri != null ? uri : URI.create("/")); if (this.headergroup != null) { request.setHeaders(this.headergroup.getAllHeaders()); } if (version != null) { request.setVersion(version); } - return new DefaultAsyncRequestProducer(request, entityProducerCopy, config); + request.setConfig(config); + return new BasicRequestProducer(request, entityProducerCopy); } } diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/DefaultAsyncRequestProducer.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/ConfigurableHttpRequest.java similarity index 65% rename from httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/DefaultAsyncRequestProducer.java rename to httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/ConfigurableHttpRequest.java index 6491981e0..19d7aaceb 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/DefaultAsyncRequestProducer.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/ConfigurableHttpRequest.java @@ -24,30 +24,40 @@ * . * */ + package org.apache.hc.client5.http.async.methods; +import java.net.URI; + import org.apache.hc.client5.http.config.Configurable; import org.apache.hc.client5.http.config.RequestConfig; -import org.apache.hc.core5.http.HttpRequest; -import org.apache.hc.core5.http.nio.AsyncEntityProducer; -import org.apache.hc.core5.http.nio.BasicRequestProducer; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.message.BasicHttpRequest; -public class DefaultAsyncRequestProducer extends BasicRequestProducer implements Configurable { +public class ConfigurableHttpRequest extends BasicHttpRequest implements Configurable { - private final RequestConfig config; + private RequestConfig requestConfig; - public DefaultAsyncRequestProducer(final HttpRequest request, final AsyncEntityProducer entityProducer, final RequestConfig config) { - super(request, entityProducer); - this.config = config; + public ConfigurableHttpRequest(final String method, final String path) { + super(method, path); } - public DefaultAsyncRequestProducer(final HttpRequest request, final AsyncEntityProducer entityProducer) { - this(request, entityProducer, null); + public ConfigurableHttpRequest(final String method, final HttpHost host, final String path) { + super(method, host, path); + } + + public ConfigurableHttpRequest(final String method, final URI requestUri) { + super(method, requestUri); } @Override public RequestConfig getConfig() { - return config; + return requestConfig; + } + + public void setConfig(final RequestConfig requestConfig) { + this.requestConfig = requestConfig; } } + diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java index 69238d91d..7fcd3c221 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java @@ -31,15 +31,16 @@ import java.net.URI; import java.util.Iterator; import org.apache.hc.client5.http.StandardMethods; +import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.HttpRequest; -import org.apache.hc.core5.http.message.BasicHttpRequest; import org.apache.hc.core5.util.Args; -public final class SimpleHttpRequest extends BasicHttpRequest { +public final class SimpleHttpRequest extends ConfigurableHttpRequest { + private RequestConfig requestConfig; private SimpleBody body; public static SimpleHttpRequest get(final URI requestUri) { diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleRequestProducer.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleRequestProducer.java index ffa2f50cd..823959ce0 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleRequestProducer.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleRequestProducer.java @@ -26,20 +26,19 @@ */ package org.apache.hc.client5.http.async.methods; -import org.apache.hc.client5.http.config.RequestConfig; -import org.apache.hc.core5.http.HttpRequest; import org.apache.hc.core5.http.nio.AsyncEntityProducer; +import org.apache.hc.core5.http.nio.BasicRequestProducer; import org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer; import org.apache.hc.core5.http.nio.entity.StringAsyncEntityProducer; import org.apache.hc.core5.util.Args; -public final class SimpleRequestProducer extends DefaultAsyncRequestProducer { +public final class SimpleRequestProducer extends BasicRequestProducer { - SimpleRequestProducer(final HttpRequest request, final AsyncEntityProducer entityProducer, final RequestConfig requestConfig) { - super(request, entityProducer, requestConfig); + SimpleRequestProducer(final SimpleHttpRequest request, final AsyncEntityProducer entityProducer) { + super(request, entityProducer); } - public static SimpleRequestProducer create(final SimpleHttpRequest request, final RequestConfig requestConfig) { + public static SimpleRequestProducer create(final SimpleHttpRequest request) { Args.notNull(request, "Request"); final SimpleBody body = request.getBody(); final AsyncEntityProducer entityProducer; @@ -52,7 +51,7 @@ public final class SimpleRequestProducer extends DefaultAsyncRequestProducer { } else { entityProducer = null; } - return new SimpleRequestProducer(request, entityProducer, requestConfig); + return new SimpleRequestProducer(request, entityProducer); } } diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/CloseableHttpAsyncClient.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/CloseableHttpAsyncClient.java index 56bcd9346..e153f2123 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/CloseableHttpAsyncClient.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/CloseableHttpAsyncClient.java @@ -88,7 +88,7 @@ public abstract class CloseableHttpAsyncClient implements HttpAsyncClient, Close final FutureCallback callback) { Args.notNull(request, "Request"); final BasicFuture future = new BasicFuture<>(callback); - execute(SimpleRequestProducer.create(request, null), SimpleResponseConsumer.create(), context, new FutureCallback() { + execute(SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), context, new FutureCallback() { @Override public void completed(final SimpleHttpResponse response) { diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncClient.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncClient.java index 0a9f3c9b2..352f70c69 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncClient.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncClient.java @@ -153,15 +153,6 @@ class InternalHttpAsyncClient extends AbstractHttpAsyncClientBase { final BasicFuture future = new BasicFuture<>(callback); try { final HttpClientContext clientContext = HttpClientContext.adapt(context); - - RequestConfig requestConfig = null; - if (requestProducer instanceof Configurable) { - requestConfig = ((Configurable) requestProducer).getConfig(); - } - if (requestConfig != null) { - clientContext.setRequestConfig(requestConfig); - } - requestProducer.sendRequest(new RequestChannel() { @Override @@ -169,6 +160,13 @@ class InternalHttpAsyncClient extends AbstractHttpAsyncClientBase { final HttpRequest request, final EntityDetails entityDetails) throws HttpException, IOException { + RequestConfig requestConfig = null; + if (request instanceof Configurable) { + requestConfig = ((Configurable) request).getConfig(); + } + if (requestConfig != null) { + clientContext.setRequestConfig(requestConfig); + } final HttpHost target = routePlanner.determineTargetHost(request, clientContext); final HttpRoute route = routePlanner.determineRoute(target, clientContext); final String exchangeId = String.format("ex-%08X", ExecSupport.getNextExecNumber()); diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/MinimalHttpAsyncClient.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/MinimalHttpAsyncClient.java index f4ce0a633..72b050a2a 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/MinimalHttpAsyncClient.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/MinimalHttpAsyncClient.java @@ -202,25 +202,25 @@ public class MinimalHttpAsyncClient extends AbstractHttpAsyncClientBase { final HttpContext context, final FutureCallback callback) { ensureRunning(); - final HttpClientContext clientContext = HttpClientContext.adapt(context); - RequestConfig requestConfig = null; - if (requestProducer instanceof Configurable) { - requestConfig = ((Configurable) requestProducer).getConfig(); - } - if (requestConfig != null) { - clientContext.setRequestConfig(requestConfig); - } else { - requestConfig = clientContext.getRequestConfig(); - } final ComplexFuture resultFuture = new ComplexFuture<>(callback); + final HttpClientContext clientContext = HttpClientContext.adapt(context); try { - final Timeout connectTimeout = requestConfig.getConnectTimeout(); requestProducer.sendRequest(new RequestChannel() { @Override public void sendRequest( final HttpRequest request, final EntityDetails entityDetails) throws HttpException, IOException { + RequestConfig requestConfig = null; + if (request instanceof Configurable) { + requestConfig = ((Configurable) request).getConfig(); + } + if (requestConfig != null) { + clientContext.setRequestConfig(requestConfig); + } else { + requestConfig = clientContext.getRequestConfig(); + } + final Timeout connectTimeout = requestConfig.getConnectTimeout(); final HttpHost target = new HttpHost(request.getAuthority(), request.getScheme()); final Future leaseFuture = leaseEndpoint(target, connectTimeout, clientContext, new FutureCallback() {