Deprecated execute methods that return an open response object in favor of execute methods with a response handler and automatic resource deallocation
This commit is contained in:
parent
d649cbaf92
commit
e6ad081b3c
|
@ -198,7 +198,7 @@ public class Request {
|
||||||
}
|
}
|
||||||
final RequestConfig config = builder.build();
|
final RequestConfig config = builder.build();
|
||||||
localContext.setRequestConfig(config);
|
localContext.setRequestConfig(config);
|
||||||
return client.execute(this.request, localContext);
|
return client.executeOpen(null, this.request, localContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Response execute() throws IOException {
|
public Response execute() throws IOException {
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class CachingHttpClientCompatibilityTest {
|
||||||
{
|
{
|
||||||
final HttpCacheContext context = HttpCacheContext.create();
|
final HttpCacheContext context = HttpCacheContext.create();
|
||||||
final HttpOptions options = new HttpOptions("*");
|
final HttpOptions options = new HttpOptions("*");
|
||||||
try (final ClassicHttpResponse response = client.execute(target, options, context)) {
|
try (final ClassicHttpResponse response = client.executeOpen(target, options, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_OK) {
|
if (code == HttpStatus.SC_OK) {
|
||||||
|
@ -137,7 +137,7 @@ public class CachingHttpClientCompatibilityTest {
|
||||||
final Pattern linkPattern = Pattern.compile("^<(.*)>;rel=preload$");
|
final Pattern linkPattern = Pattern.compile("^<(.*)>;rel=preload$");
|
||||||
final List<String> links = new ArrayList<>();
|
final List<String> links = new ArrayList<>();
|
||||||
final HttpGet getRoot1 = new HttpGet("/");
|
final HttpGet getRoot1 = new HttpGet("/");
|
||||||
try (ClassicHttpResponse response = client.execute(target, getRoot1, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, getRoot1, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
|
@ -158,7 +158,7 @@ public class CachingHttpClientCompatibilityTest {
|
||||||
|
|
||||||
for (final String link: links) {
|
for (final String link: links) {
|
||||||
final HttpGet getLink = new HttpGet(link);
|
final HttpGet getLink = new HttpGet(link);
|
||||||
try (ClassicHttpResponse response = client.execute(target, getLink, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, getLink, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
|
@ -172,7 +172,7 @@ public class CachingHttpClientCompatibilityTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final HttpGet getRoot2 = new HttpGet("/");
|
final HttpGet getRoot2 = new HttpGet("/");
|
||||||
try (ClassicHttpResponse response = client.execute(target, getRoot2, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, getRoot2, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
|
@ -186,7 +186,7 @@ public class CachingHttpClientCompatibilityTest {
|
||||||
}
|
}
|
||||||
for (final String link: links) {
|
for (final String link: links) {
|
||||||
final HttpGet getLink = new HttpGet(link);
|
final HttpGet getLink = new HttpGet(link);
|
||||||
try (ClassicHttpResponse response = client.execute(target, getLink, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, getLink, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
final CacheResponseStatus cacheResponseStatus = context.getCacheResponseStatus();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
|
|
|
@ -142,7 +142,7 @@ public class HttpClientCompatibilityTest {
|
||||||
final HttpClientContext context = HttpClientContext.create();
|
final HttpClientContext context = HttpClientContext.create();
|
||||||
context.setCredentialsProvider(credentialsProvider);
|
context.setCredentialsProvider(credentialsProvider);
|
||||||
final HttpOptions options = new HttpOptions("*");
|
final HttpOptions options = new HttpOptions("*");
|
||||||
try (ClassicHttpResponse response = client.execute(target, options, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, options, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_OK) {
|
if (code == HttpStatus.SC_OK) {
|
||||||
|
@ -162,7 +162,7 @@ public class HttpClientCompatibilityTest {
|
||||||
final String[] requestUris = new String[] {"/", "/news.html", "/status.html"};
|
final String[] requestUris = new String[] {"/", "/news.html", "/status.html"};
|
||||||
for (final String requestUri: requestUris) {
|
for (final String requestUri: requestUris) {
|
||||||
final HttpGet httpGet = new HttpGet(requestUri);
|
final HttpGet httpGet = new HttpGet(requestUri);
|
||||||
try (ClassicHttpResponse response = client.execute(target, httpGet, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, httpGet, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_OK) {
|
if (code == HttpStatus.SC_OK) {
|
||||||
|
@ -185,7 +185,7 @@ public class HttpClientCompatibilityTest {
|
||||||
context.setCredentialsProvider(credentialsProvider);
|
context.setCredentialsProvider(credentialsProvider);
|
||||||
|
|
||||||
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
||||||
try (ClassicHttpResponse response = client.execute(target, httpGetSecret, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, httpGetSecret, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_UNAUTHORIZED) {
|
if (code == HttpStatus.SC_UNAUTHORIZED) {
|
||||||
|
@ -207,7 +207,7 @@ public class HttpClientCompatibilityTest {
|
||||||
context.setCredentialsProvider(credentialsProvider);
|
context.setCredentialsProvider(credentialsProvider);
|
||||||
|
|
||||||
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
||||||
try (ClassicHttpResponse response = client.execute(target, httpGetSecret, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, httpGetSecret, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_UNAUTHORIZED) {
|
if (code == HttpStatus.SC_UNAUTHORIZED) {
|
||||||
|
@ -229,7 +229,7 @@ public class HttpClientCompatibilityTest {
|
||||||
context.setCredentialsProvider(credentialsProvider);
|
context.setCredentialsProvider(credentialsProvider);
|
||||||
|
|
||||||
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
||||||
try (ClassicHttpResponse response = client.execute(target, httpGetSecret, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, httpGetSecret, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_OK) {
|
if (code == HttpStatus.SC_OK) {
|
||||||
|
@ -252,7 +252,7 @@ public class HttpClientCompatibilityTest {
|
||||||
|
|
||||||
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
final HttpGet httpGetSecret = new HttpGet("/private/big-secret.txt");
|
||||||
httpGetSecret.setHeader(HttpHeaders.CONNECTION, HeaderElements.CLOSE);
|
httpGetSecret.setHeader(HttpHeaders.CONNECTION, HeaderElements.CLOSE);
|
||||||
try (ClassicHttpResponse response = client.execute(target, httpGetSecret, context)) {
|
try (ClassicHttpResponse response = client.executeOpen(target, httpGetSecret, context)) {
|
||||||
final int code = response.getCode();
|
final int code = response.getCode();
|
||||||
EntityUtils.consume(response.getEntity());
|
EntityUtils.consume(response.getEntity());
|
||||||
if (code == HttpStatus.SC_OK) {
|
if (code == HttpStatus.SC_OK) {
|
||||||
|
|
|
@ -30,8 +30,8 @@ import org.apache.hc.client5.http.classic.methods.HttpGet;
|
||||||
import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
|
import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
|
||||||
import org.apache.hc.core5.http.HttpHost;
|
import org.apache.hc.core5.http.HttpHost;
|
||||||
import org.apache.hc.core5.http.io.entity.EntityUtils;
|
import org.apache.hc.core5.http.io.entity.EntityUtils;
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
|
||||||
public class TestBasicConnectionManager extends LocalServerTestBase {
|
public class TestBasicConnectionManager extends LocalServerTestBase {
|
||||||
|
|
||||||
|
@ -54,10 +54,10 @@ public class TestBasicConnectionManager extends LocalServerTestBase {
|
||||||
|
|
||||||
final HttpHost target = start();
|
final HttpHost target = start();
|
||||||
final HttpGet get1 = new HttpGet("/random/1024");
|
final HttpGet get1 = new HttpGet("/random/1024");
|
||||||
this.httpclient.execute(target, get1);
|
this.httpclient.executeOpen(target, get1, null);
|
||||||
final HttpGet get2 = new HttpGet("/random/1024");
|
final HttpGet get2 = new HttpGet("/random/1024");
|
||||||
Assertions.assertThrows(IllegalStateException.class, () ->
|
Assertions.assertThrows(IllegalStateException.class, () ->
|
||||||
this.httpclient.execute(target, get2));
|
this.httpclient.executeOpen(target, get2, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
package org.apache.hc.client5.http.classic;
|
package org.apache.hc.client5.http.classic;
|
||||||
|
|
||||||
|
import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.apache.hc.core5.http.ClassicHttpRequest;
|
import org.apache.hc.core5.http.ClassicHttpRequest;
|
||||||
|
@ -57,7 +58,17 @@ public interface HttpClient {
|
||||||
* or handled automatically depends on the implementation and
|
* or handled automatically depends on the implementation and
|
||||||
* configuration of this client.
|
* configuration of this client.
|
||||||
* @throws IOException in case of a problem or the connection was aborted
|
* @throws IOException in case of a problem or the connection was aborted
|
||||||
|
*
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(ClassicHttpRequest, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(ClassicHttpRequest, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
HttpResponse execute(ClassicHttpRequest request) throws IOException;
|
HttpResponse execute(ClassicHttpRequest request) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,7 +84,17 @@ public interface HttpClient {
|
||||||
* or handled automatically depends on the implementation and
|
* or handled automatically depends on the implementation and
|
||||||
* configuration of this client.
|
* configuration of this client.
|
||||||
* @throws IOException in case of a problem or the connection was aborted
|
* @throws IOException in case of a problem or the connection was aborted
|
||||||
|
*
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(ClassicHttpRequest, HttpContext, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(ClassicHttpRequest, HttpContext, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
HttpResponse execute(ClassicHttpRequest request, HttpContext context) throws IOException;
|
HttpResponse execute(ClassicHttpRequest request, HttpContext context) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,7 +112,17 @@ public interface HttpClient {
|
||||||
* or handled automatically depends on the implementation and
|
* or handled automatically depends on the implementation and
|
||||||
* configuration of this client.
|
* configuration of this client.
|
||||||
* @throws IOException in case of a problem or the connection was aborted
|
* @throws IOException in case of a problem or the connection was aborted
|
||||||
|
*
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(HttpHost, ClassicHttpRequest, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(HttpHost, ClassicHttpRequest, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
ClassicHttpResponse execute(HttpHost target, ClassicHttpRequest request) throws IOException;
|
ClassicHttpResponse execute(HttpHost target, ClassicHttpRequest request) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -111,9 +142,47 @@ public interface HttpClient {
|
||||||
* or handled automatically depends on the implementation and
|
* or handled automatically depends on the implementation and
|
||||||
* configuration of this client.
|
* configuration of this client.
|
||||||
* @throws IOException in case of a problem or the connection was aborted
|
* @throws IOException in case of a problem or the connection was aborted
|
||||||
|
*
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(HttpHost, ClassicHttpRequest, HttpContext, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(HttpHost, ClassicHttpRequest, HttpContext, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
HttpResponse execute(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException;
|
HttpResponse execute(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the request and opens the response stream using the given context.
|
||||||
|
*
|
||||||
|
* @param target the target host for the request.
|
||||||
|
* Implementations may accept {@code null}
|
||||||
|
* if they can still determine a route, for example
|
||||||
|
* to a default target or by inspecting the request.
|
||||||
|
* @param request the request to execute
|
||||||
|
* @param context the context to use for the execution, or
|
||||||
|
* {@code null} to use the default context
|
||||||
|
*
|
||||||
|
* @return the response to the request. This is always a final response,
|
||||||
|
* never an intermediate response with an 1xx status code.
|
||||||
|
* Whether redirects or authentication challenges will be returned
|
||||||
|
* or handled automatically depends on the implementation and
|
||||||
|
* configuration of this client.
|
||||||
|
* The response returned by this method must be closed with
|
||||||
|
* {@link Closeable#close()} in order ensure deallocation
|
||||||
|
* of system resources.
|
||||||
|
* @throws IOException in case of a problem or the connection was aborted
|
||||||
|
*
|
||||||
|
* @since 5.2
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
default ClassicHttpResponse executeOpen(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException {
|
||||||
|
return (ClassicHttpResponse) execute(target, request, context);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes HTTP request using the default context and processes the
|
* Executes HTTP request using the default context and processes the
|
||||||
* response using the given response handler.
|
* response using the given response handler.
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.apache.hc.client5.http.routing.RoutingSupport;
|
||||||
import org.apache.hc.core5.annotation.Contract;
|
import org.apache.hc.core5.annotation.Contract;
|
||||||
import org.apache.hc.core5.annotation.ThreadingBehavior;
|
import org.apache.hc.core5.annotation.ThreadingBehavior;
|
||||||
import org.apache.hc.core5.http.ClassicHttpRequest;
|
import org.apache.hc.core5.http.ClassicHttpRequest;
|
||||||
|
import org.apache.hc.core5.http.ClassicHttpResponse;
|
||||||
import org.apache.hc.core5.http.HttpEntity;
|
import org.apache.hc.core5.http.HttpEntity;
|
||||||
import org.apache.hc.core5.http.HttpException;
|
import org.apache.hc.core5.http.HttpException;
|
||||||
import org.apache.hc.core5.http.HttpHost;
|
import org.apache.hc.core5.http.HttpHost;
|
||||||
|
@ -57,23 +58,7 @@ public abstract class CloseableHttpClient implements HttpClient, ModalCloseable
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(CloseableHttpClient.class);
|
private static final Logger LOG = LoggerFactory.getLogger(CloseableHttpClient.class);
|
||||||
|
|
||||||
protected abstract CloseableHttpResponse doExecute(HttpHost target, ClassicHttpRequest request,
|
protected abstract CloseableHttpResponse doExecute(HttpHost target, ClassicHttpRequest request,
|
||||||
HttpContext context) throws IOException;
|
HttpContext context) throws IOException;
|
||||||
|
|
||||||
@Override
|
|
||||||
public CloseableHttpResponse execute(
|
|
||||||
final HttpHost target,
|
|
||||||
final ClassicHttpRequest request,
|
|
||||||
final HttpContext context) throws IOException {
|
|
||||||
return doExecute(target, request, context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CloseableHttpResponse execute(
|
|
||||||
final ClassicHttpRequest request,
|
|
||||||
final HttpContext context) throws IOException {
|
|
||||||
Args.notNull(request, "HTTP request");
|
|
||||||
return doExecute(determineTarget(request), request, context);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static HttpHost determineTarget(final ClassicHttpRequest request) throws ClientProtocolException {
|
private static HttpHost determineTarget(final ClassicHttpRequest request) throws ClientProtocolException {
|
||||||
try {
|
try {
|
||||||
|
@ -83,12 +68,72 @@ public abstract class CloseableHttpClient implements HttpClient, ModalCloseable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(HttpHost, ClassicHttpRequest, HttpContext, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(HttpHost, ClassicHttpRequest, HttpContext, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public CloseableHttpResponse execute(
|
||||||
|
final HttpHost target,
|
||||||
|
final ClassicHttpRequest request,
|
||||||
|
final HttpContext context) throws IOException {
|
||||||
|
return doExecute(target, request, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(ClassicHttpRequest, HttpContext, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(ClassicHttpRequest, HttpContext, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public CloseableHttpResponse execute(
|
||||||
|
final ClassicHttpRequest request,
|
||||||
|
final HttpContext context) throws IOException {
|
||||||
|
Args.notNull(request, "HTTP request");
|
||||||
|
return doExecute(determineTarget(request), request, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(ClassicHttpRequest, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(ClassicHttpRequest, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public CloseableHttpResponse execute(
|
public CloseableHttpResponse execute(
|
||||||
final ClassicHttpRequest request) throws IOException {
|
final ClassicHttpRequest request) throws IOException {
|
||||||
return execute(request, (HttpContext) null);
|
return doExecute(determineTarget(request), request, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated It is strongly recommended to use execute methods with {@link HttpClientResponseHandler}
|
||||||
|
* such as {@link #execute(HttpHost, ClassicHttpRequest, HttpClientResponseHandler)} in order
|
||||||
|
* to ensure automatic resource deallocation by the client.
|
||||||
|
* For special cases one can still use {@link #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)}
|
||||||
|
* to keep the response object open after the request execution.
|
||||||
|
*
|
||||||
|
* @see #execute(HttpHost, ClassicHttpRequest, HttpClientResponseHandler)
|
||||||
|
* @see #executeOpen(HttpHost, ClassicHttpRequest, HttpContext)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public CloseableHttpResponse execute(
|
public CloseableHttpResponse execute(
|
||||||
final HttpHost target,
|
final HttpHost target,
|
||||||
|
@ -197,7 +242,7 @@ public abstract class CloseableHttpClient implements HttpClient, ModalCloseable
|
||||||
final HttpClientResponseHandler<? extends T> responseHandler) throws IOException {
|
final HttpClientResponseHandler<? extends T> responseHandler) throws IOException {
|
||||||
Args.notNull(responseHandler, "Response handler");
|
Args.notNull(responseHandler, "Response handler");
|
||||||
|
|
||||||
try (final CloseableHttpResponse response = execute(target, request, context)) {
|
try (final ClassicHttpResponse response = doExecute(target, request, context)) {
|
||||||
try {
|
try {
|
||||||
final T result = responseHandler.handleResponse(response);
|
final T result = responseHandler.handleResponse(response);
|
||||||
final HttpEntity entity = response.getEntity();
|
final HttpEntity entity = response.getEntity();
|
||||||
|
|
|
@ -81,7 +81,9 @@ public class TestCloseableHttpClient {
|
||||||
@Test
|
@Test
|
||||||
public void testExecuteRequestAbsoluteURI() throws Exception {
|
public void testExecuteRequestAbsoluteURI() throws Exception {
|
||||||
final HttpGet httpget = new HttpGet("https://somehost:444/stuff");
|
final HttpGet httpget = new HttpGet("https://somehost:444/stuff");
|
||||||
client.execute(httpget);
|
Mockito.when(client.doExecute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response);
|
||||||
|
client.execute(httpget, response -> null);
|
||||||
|
|
||||||
Mockito.verify(client).doExecute(
|
Mockito.verify(client).doExecute(
|
||||||
Mockito.eq(new HttpHost("https", "somehost", 444)),
|
Mockito.eq(new HttpHost("https", "somehost", 444)),
|
||||||
|
@ -92,7 +94,9 @@ public class TestCloseableHttpClient {
|
||||||
@Test
|
@Test
|
||||||
public void testExecuteRequestRelativeURI() throws Exception {
|
public void testExecuteRequestRelativeURI() throws Exception {
|
||||||
final HttpGet httpget = new HttpGet("/stuff");
|
final HttpGet httpget = new HttpGet("/stuff");
|
||||||
client.execute(httpget);
|
Mockito.when(client.doExecute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response);
|
||||||
|
client.execute(httpget, response -> null);
|
||||||
|
|
||||||
Mockito.verify(client).doExecute(
|
Mockito.verify(client).doExecute(
|
||||||
(HttpHost) Mockito.isNull(),
|
(HttpHost) Mockito.isNull(),
|
||||||
|
@ -100,17 +104,6 @@ public class TestCloseableHttpClient {
|
||||||
(HttpContext) Mockito.isNull());
|
(HttpContext) Mockito.isNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testExecuteRequest() throws Exception {
|
|
||||||
final HttpGet httpget = new HttpGet("https://somehost:444/stuff");
|
|
||||||
|
|
||||||
Mockito.when(client.doExecute(
|
|
||||||
new HttpHost("https", "somehost", 444), httpget, null)).thenReturn(response);
|
|
||||||
|
|
||||||
final CloseableHttpResponse result = client.execute(httpget);
|
|
||||||
Assertions.assertSame(response, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExecuteRequestHandleResponse() throws Exception {
|
public void testExecuteRequestHandleResponse() throws Exception {
|
||||||
final HttpGet httpget = new HttpGet("https://somehost:444/stuff");
|
final HttpGet httpget = new HttpGet("https://somehost:444/stuff");
|
||||||
|
|
|
@ -46,6 +46,7 @@ import org.apache.hc.core5.http.HttpException;
|
||||||
import org.apache.hc.core5.http.HttpHost;
|
import org.apache.hc.core5.http.HttpHost;
|
||||||
import org.apache.hc.core5.http.config.Lookup;
|
import org.apache.hc.core5.http.config.Lookup;
|
||||||
import org.apache.hc.core5.http.impl.io.HttpRequestExecutor;
|
import org.apache.hc.core5.http.impl.io.HttpRequestExecutor;
|
||||||
|
import org.apache.hc.core5.http.message.BasicClassicHttpResponse;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -101,8 +102,11 @@ public class TestInternalHttpClient {
|
||||||
Mockito.when(routePlanner.determineRoute(
|
Mockito.when(routePlanner.determineRoute(
|
||||||
Mockito.eq(new HttpHost("somehost")),
|
Mockito.eq(new HttpHost("somehost")),
|
||||||
Mockito.<HttpClientContext>any())).thenReturn(route);
|
Mockito.<HttpClientContext>any())).thenReturn(route);
|
||||||
|
Mockito.when(execChain.execute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(
|
||||||
|
CloseableHttpResponse.adapt(new BasicClassicHttpResponse(200)));
|
||||||
|
|
||||||
client.execute(httpget);
|
client.execute(httpget, response -> null);
|
||||||
|
|
||||||
Mockito.verify(execChain).execute(
|
Mockito.verify(execChain).execute(
|
||||||
Mockito.any(),
|
Mockito.any(),
|
||||||
|
@ -118,13 +122,16 @@ public class TestInternalHttpClient {
|
||||||
Mockito.when(routePlanner.determineRoute(
|
Mockito.when(routePlanner.determineRoute(
|
||||||
Mockito.eq(new HttpHost("somehost")),
|
Mockito.eq(new HttpHost("somehost")),
|
||||||
Mockito.<HttpClientContext>any())).thenReturn(route);
|
Mockito.<HttpClientContext>any())).thenReturn(route);
|
||||||
|
Mockito.when(execChain.execute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(
|
||||||
|
CloseableHttpResponse.adapt(new BasicClassicHttpResponse(200)));
|
||||||
Mockito.when(execChain.execute(
|
Mockito.when(execChain.execute(
|
||||||
Mockito.any(),
|
Mockito.any(),
|
||||||
Mockito.any(),
|
Mockito.any(),
|
||||||
Mockito.any())).thenThrow(new HttpException());
|
Mockito.any())).thenThrow(new HttpException());
|
||||||
|
|
||||||
Assertions.assertThrows(ClientProtocolException.class, () ->
|
Assertions.assertThrows(ClientProtocolException.class, () ->
|
||||||
client.execute(httpget));
|
client.execute(httpget, response -> null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -135,9 +142,12 @@ public class TestInternalHttpClient {
|
||||||
Mockito.when(routePlanner.determineRoute(
|
Mockito.when(routePlanner.determineRoute(
|
||||||
Mockito.eq(new HttpHost("somehost")),
|
Mockito.eq(new HttpHost("somehost")),
|
||||||
Mockito.<HttpClientContext>any())).thenReturn(route);
|
Mockito.<HttpClientContext>any())).thenReturn(route);
|
||||||
|
Mockito.when(execChain.execute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(
|
||||||
|
CloseableHttpResponse.adapt(new BasicClassicHttpResponse(200)));
|
||||||
|
|
||||||
final HttpClientContext context = HttpClientContext.create();
|
final HttpClientContext context = HttpClientContext.create();
|
||||||
client.execute(httpget, context);
|
client.execute(httpget, context, response -> null);
|
||||||
|
|
||||||
Assertions.assertSame(cookieSpecRegistry, context.getCookieSpecRegistry());
|
Assertions.assertSame(cookieSpecRegistry, context.getCookieSpecRegistry());
|
||||||
Assertions.assertSame(authSchemeRegistry, context.getAuthSchemeRegistry());
|
Assertions.assertSame(authSchemeRegistry, context.getAuthSchemeRegistry());
|
||||||
|
@ -154,11 +164,14 @@ public class TestInternalHttpClient {
|
||||||
Mockito.when(routePlanner.determineRoute(
|
Mockito.when(routePlanner.determineRoute(
|
||||||
Mockito.eq(new HttpHost("somehost")),
|
Mockito.eq(new HttpHost("somehost")),
|
||||||
Mockito.<HttpClientContext>any())).thenReturn(route);
|
Mockito.<HttpClientContext>any())).thenReturn(route);
|
||||||
|
Mockito.when(execChain.execute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(
|
||||||
|
CloseableHttpResponse.adapt(new BasicClassicHttpResponse(200)));
|
||||||
|
|
||||||
final RequestConfig config = RequestConfig.custom().build();
|
final RequestConfig config = RequestConfig.custom().build();
|
||||||
httpget.setConfig(config);
|
httpget.setConfig(config);
|
||||||
final HttpClientContext context = HttpClientContext.create();
|
final HttpClientContext context = HttpClientContext.create();
|
||||||
client.execute(httpget, context);
|
client.execute(httpget, context, response -> null);
|
||||||
|
|
||||||
Assertions.assertSame(config, context.getRequestConfig());
|
Assertions.assertSame(config, context.getRequestConfig());
|
||||||
}
|
}
|
||||||
|
@ -171,6 +184,9 @@ public class TestInternalHttpClient {
|
||||||
Mockito.when(routePlanner.determineRoute(
|
Mockito.when(routePlanner.determineRoute(
|
||||||
Mockito.eq(new HttpHost("somehost")),
|
Mockito.eq(new HttpHost("somehost")),
|
||||||
Mockito.<HttpClientContext>any())).thenReturn(route);
|
Mockito.<HttpClientContext>any())).thenReturn(route);
|
||||||
|
Mockito.when(execChain.execute(
|
||||||
|
Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(
|
||||||
|
CloseableHttpResponse.adapt(new BasicClassicHttpResponse(200)));
|
||||||
|
|
||||||
final HttpClientContext context = HttpClientContext.create();
|
final HttpClientContext context = HttpClientContext.create();
|
||||||
|
|
||||||
|
@ -186,7 +202,7 @@ public class TestInternalHttpClient {
|
||||||
context.setCredentialsProvider(localCredentialsProvider);
|
context.setCredentialsProvider(localCredentialsProvider);
|
||||||
context.setRequestConfig(localConfig);
|
context.setRequestConfig(localConfig);
|
||||||
|
|
||||||
client.execute(httpget, context);
|
client.execute(httpget, context, response -> null);
|
||||||
|
|
||||||
Assertions.assertSame(localCookieSpecRegistry, context.getCookieSpecRegistry());
|
Assertions.assertSame(localCookieSpecRegistry, context.getCookieSpecRegistry());
|
||||||
Assertions.assertSame(localAuthSchemeRegistry, context.getAuthSchemeRegistry());
|
Assertions.assertSame(localAuthSchemeRegistry, context.getAuthSchemeRegistry());
|
||||||
|
|
Loading…
Reference in New Issue