Skip to content

Replace httpclient.execute call with httpclient.executeOpen as mentioned in deprecation notes of httpclient.execute #6298

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.hc.client5.http.ClientProtocolException;
import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
import org.apache.hc.client5.http.DnsResolver;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
Expand All @@ -54,9 +55,11 @@
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
import org.apache.hc.client5.http.routing.RoutingSupport;
import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpEntity;
Expand Down Expand Up @@ -275,14 +278,25 @@ private HttpExecuteResponse execute(HttpUriRequestBase apacheRequest, MetricColl
HttpClientContext localRequestContext = Apache5Utils.newClientContext(requestConfig.proxyConfiguration());
THREAD_LOCAL_REQUEST_METRIC_COLLECTOR.set(metricCollector);
try {
HttpResponse httpResponse = httpClient.execute(apacheRequest, localRequestContext);
// Create a connection-aware input stream that closes the response when closed
HttpHost target = determineTarget(apacheRequest);
ClassicHttpResponse httpResponse = httpClient.executeOpen(target, apacheRequest, localRequestContext);
return createResponse(httpResponse, apacheRequest);
} finally {
THREAD_LOCAL_REQUEST_METRIC_COLLECTOR.remove();
}
}

/**
* Determines the target host from the request using Apache HttpClient's official routing support utility.
*/
private static HttpHost determineTarget(ClassicHttpRequest request) throws IOException {
try {
return RoutingSupport.determineHost(request);
} catch (HttpException ex) {
throw new ClientProtocolException(ex);
}
}

private HttpUriRequestBase toApacheRequest(HttpExecuteRequest request) {
return apacheHttpRequestFactory.create(request, requestConfig);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ public ClassicHttpResponse execute(HttpHost target, ClassicHttpRequest request)
return delegate.execute(target, request);
}

@Override
public ClassicHttpResponse executeOpen(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException {
return delegate.executeOpen(target, request, context);
}

@Override
public HttpResponse execute(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException {
return delegate.execute(target, request, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ public void closeReleasesResources() throws Exception {
}

@Test
public void connectionTimeout_exceedsLimit_throwsException() throws Exception {
public void connectionTimeout_exceedsLimit_throwsException() {
// Test connection timeout with a very short timeout and non-responsive address
try (SdkHttpClient client = Apache5HttpClient.builder()
.connectionTimeout(Duration.ofMillis(100))
Expand Down Expand Up @@ -318,7 +318,7 @@ public void connectionTimeout_exceedsLimit_throwsException() throws Exception {
}

@Test
public void socketTimeout_exceedsLimit_throwsException() throws Exception {
public void socketTimeout_exceedsLimit_throwsException() {
// Configure WireMock to delay response longer than socket timeout
mockServer.stubFor(any(urlPathEqualTo("/delayed"))
.willReturn(aResponse()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,7 @@
import org.apache.hc.client5.http.classic.methods.HttpUriRequest;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.HttpVersion;
import org.apache.hc.core5.http.io.HttpClientResponseHandler;
import org.apache.hc.core5.http.message.BasicClassicHttpResponse;
import org.apache.hc.core5.http.message.BasicHttpResponse;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.pool.PoolStats;
import org.junit.Before;
Expand All @@ -43,7 +39,6 @@
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import software.amazon.awssdk.http.SdkHttpFullRequest;
import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.apache5.internal.Apache5HttpRequestConfig;
Expand All @@ -63,12 +58,12 @@ public class MetricReportingTest {

@Before
public void methodSetup() throws IOException {

when(mockHttpClient.execute(any(HttpUriRequest.class), any(HttpContext.class)))
.thenReturn(new BasicClassicHttpResponse(200, "OK"));

// Create a response that can be reused
BasicClassicHttpResponse response = new BasicClassicHttpResponse(200, "OK");
// Mock executeOpen which is now being used
when(mockHttpClient.executeOpen(any(), any(HttpUriRequest.class), any(HttpContext.class)))
.thenReturn(response);
when(mockHttpClient.getHttpClientConnectionManager()).thenReturn(cm);

PoolStats stats = new PoolStats(1, 2, 3, 4);
when(cm.getTotalStats()).thenReturn(stats);
}
Expand Down Expand Up @@ -117,11 +112,11 @@ private Apache5HttpClient newClient() {
}

private HttpExecuteRequest newRequest(MetricCollector collector) {
final SdkHttpFullRequest sdkRequest = SdkHttpFullRequest.builder()
.method(SdkHttpMethod.HEAD)
.host("amazonaws.com")
.protocol("https")
.build();
SdkHttpFullRequest sdkRequest = SdkHttpFullRequest.builder()
.method(SdkHttpMethod.HEAD)
.host("amazonaws.com")
.protocol("https")
.build();
return HttpExecuteRequest.builder()
.request(sdkRequest)
.metricCollector(collector)
Expand Down