Skip to content

Commit 63d2f5f

Browse files
committed
replace httpclient.execute call with httpclient.executeOpen as mentioned in deprecation notes of httpclient.execute
1 parent e167431 commit 63d2f5f

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

http-clients/apache5-client/src/main/java/software/amazon/awssdk/http/apache5/Apache5HttpClient.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.net.ssl.SSLContext;
4040
import javax.net.ssl.TrustManager;
4141
import javax.net.ssl.X509TrustManager;
42+
import org.apache.hc.client5.http.ClientProtocolException;
4243
import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
4344
import org.apache.hc.client5.http.DnsResolver;
4445
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
@@ -54,9 +55,11 @@
5455
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
5556
import org.apache.hc.client5.http.protocol.HttpClientContext;
5657
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
58+
import org.apache.hc.client5.http.routing.RoutingSupport;
5759
import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
5860
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
5961
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
62+
import org.apache.hc.core5.http.ClassicHttpRequest;
6063
import org.apache.hc.core5.http.ClassicHttpResponse;
6164
import org.apache.hc.core5.http.Header;
6265
import org.apache.hc.core5.http.HttpEntity;
@@ -275,14 +278,23 @@ private HttpExecuteResponse execute(HttpUriRequestBase apacheRequest, MetricColl
275278
HttpClientContext localRequestContext = Apache5Utils.newClientContext(requestConfig.proxyConfiguration());
276279
THREAD_LOCAL_REQUEST_METRIC_COLLECTOR.set(metricCollector);
277280
try {
278-
HttpResponse httpResponse = httpClient.execute(apacheRequest, localRequestContext);
279-
// Create a connection-aware input stream that closes the response when closed
281+
HttpHost target = determineTarget(apacheRequest);
282+
ClassicHttpResponse httpResponse = httpClient.executeOpen(target, apacheRequest, localRequestContext);
280283
return createResponse(httpResponse, apacheRequest);
281284
} finally {
282285
THREAD_LOCAL_REQUEST_METRIC_COLLECTOR.remove();
283286
}
284287
}
285288

289+
private static HttpHost determineTarget(final ClassicHttpRequest request) throws IOException {
290+
try {
291+
return RoutingSupport.determineHost(request);
292+
} catch (final HttpException ex) {
293+
throw new ClientProtocolException(ex);
294+
}
295+
}
296+
297+
286298
private HttpUriRequestBase toApacheRequest(HttpExecuteRequest request) {
287299
return apacheHttpRequestFactory.create(request, requestConfig);
288300
}

http-clients/apache5-client/src/main/java/software/amazon/awssdk/http/apache5/internal/impl/Apache5SdkHttpClient.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ public ClassicHttpResponse execute(HttpHost target, ClassicHttpRequest request)
6565
return delegate.execute(target, request);
6666
}
6767

68+
@Override
69+
public ClassicHttpResponse executeOpen(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException {
70+
return delegate.executeOpen(target, request, context);
71+
}
72+
6873
@Override
6974
public HttpResponse execute(HttpHost target, ClassicHttpRequest request, HttpContext context) throws IOException {
7075
return delegate.execute(target, request, context);

http-clients/apache5-client/src/test/java/software/amazon/awssdk/http/apache5/MetricReportingTest.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,7 @@
3030
import org.apache.hc.client5.http.classic.methods.HttpUriRequest;
3131
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
3232
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
33-
import org.apache.hc.core5.http.ClassicHttpResponse;
34-
import org.apache.hc.core5.http.HttpVersion;
35-
import org.apache.hc.core5.http.io.HttpClientResponseHandler;
3633
import org.apache.hc.core5.http.message.BasicClassicHttpResponse;
37-
import org.apache.hc.core5.http.message.BasicHttpResponse;
3834
import org.apache.hc.core5.http.protocol.HttpContext;
3935
import org.apache.hc.core5.pool.PoolStats;
4036
import org.junit.Before;
@@ -43,7 +39,6 @@
4339
import org.mockito.Mock;
4440
import org.mockito.junit.MockitoJUnitRunner;
4541
import software.amazon.awssdk.http.HttpExecuteRequest;
46-
import software.amazon.awssdk.http.HttpExecuteResponse;
4742
import software.amazon.awssdk.http.SdkHttpFullRequest;
4843
import software.amazon.awssdk.http.SdkHttpMethod;
4944
import software.amazon.awssdk.http.apache5.internal.Apache5HttpRequestConfig;
@@ -63,16 +58,20 @@ public class MetricReportingTest {
6358

6459
@Before
6560
public void methodSetup() throws IOException {
61+
// Create a response that can be reused
62+
BasicClassicHttpResponse response = new BasicClassicHttpResponse(200, "OK");
6663

67-
when(mockHttpClient.execute(any(HttpUriRequest.class), any(HttpContext.class)))
68-
.thenReturn(new BasicClassicHttpResponse(200, "OK"));
64+
// Mock executeOpen which is now being used
65+
when(mockHttpClient.executeOpen(any(), any(HttpUriRequest.class), any(HttpContext.class)))
66+
.thenReturn(response);
6967

7068
when(mockHttpClient.getHttpClientConnectionManager()).thenReturn(cm);
7169

7270
PoolStats stats = new PoolStats(1, 2, 3, 4);
7371
when(cm.getTotalStats()).thenReturn(stats);
7472
}
7573

74+
7675
@Test
7776
public void prepareRequest_callableCalled_metricsReported() throws IOException {
7877
Apache5HttpClient client = newClient();
@@ -117,11 +116,11 @@ private Apache5HttpClient newClient() {
117116
}
118117

119118
private HttpExecuteRequest newRequest(MetricCollector collector) {
120-
final SdkHttpFullRequest sdkRequest = SdkHttpFullRequest.builder()
121-
.method(SdkHttpMethod.HEAD)
122-
.host("amazonaws.com")
123-
.protocol("https")
124-
.build();
119+
SdkHttpFullRequest sdkRequest = SdkHttpFullRequest.builder()
120+
.method(SdkHttpMethod.HEAD)
121+
.host("amazonaws.com")
122+
.protocol("https")
123+
.build();
125124
return HttpExecuteRequest.builder()
126125
.request(sdkRequest)
127126
.metricCollector(collector)

0 commit comments

Comments
 (0)