Skip to content

Commit dfeff16

Browse files
committed
Removed ConnectionSocketFactory API since its deprecated and mentioned not to use
2 parents dcaaaf6 + 2590e6e commit dfeff16

File tree

12 files changed

+103
-527
lines changed

12 files changed

+103
-527
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "Apache HTTP Client 5",
4+
"contributor": "",
5+
"description": "Preview Release of AWS SDK Apache5 HttpClient with Apache HttpClient 5.5.x"
6+
}

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

Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
4545
import org.apache.hc.client5.http.auth.CredentialsProvider;
4646
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
47+
import org.apache.hc.client5.http.config.ConnectionConfig;
4748
import org.apache.hc.client5.http.impl.DefaultSchemePortResolver;
4849
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
4950
import org.apache.hc.client5.http.impl.classic.HttpClients;
@@ -71,6 +72,7 @@
7172
import org.apache.hc.core5.pool.PoolStats;
7273
import org.apache.hc.core5.ssl.SSLInitializationException;
7374
import org.apache.hc.core5.util.TimeValue;
75+
import org.apache.hc.core5.util.Timeout;
7476
import software.amazon.awssdk.annotations.SdkPreviewApi;
7577
import software.amazon.awssdk.annotations.SdkPublicApi;
7678
import software.amazon.awssdk.annotations.SdkTestInternalApi;
@@ -88,7 +90,6 @@
8890
import software.amazon.awssdk.http.apache5.internal.DefaultConfiguration;
8991
import software.amazon.awssdk.http.apache5.internal.SdkProxyRoutePlanner;
9092
import software.amazon.awssdk.http.apache5.internal.conn.ClientConnectionManagerFactory;
91-
import software.amazon.awssdk.http.apache5.internal.conn.ConnectionSocketFactoryToTlsStrategyAdapter;
9293
import software.amazon.awssdk.http.apache5.internal.conn.IdleConnectionReaper;
9394
import software.amazon.awssdk.http.apache5.internal.conn.SdkConnectionKeepAliveStrategy;
9495
import software.amazon.awssdk.http.apache5.internal.conn.SdkTlsSocketFactory;
@@ -345,7 +346,6 @@ private Apache5HttpRequestConfig createRequestConfig(DefaultBuilder builder,
345346
AttributeMap resolvedOptions) {
346347
return Apache5HttpRequestConfig.builder()
347348
.socketTimeout(resolvedOptions.get(SdkHttpConfigurationOption.READ_TIMEOUT))
348-
.connectionTimeout(resolvedOptions.get(SdkHttpConfigurationOption.CONNECTION_TIMEOUT))
349349
.connectionAcquireTimeout(
350350
resolvedOptions.get(SdkHttpConfigurationOption.CONNECTION_ACQUIRE_TIMEOUT))
351351
.proxyConfiguration(builder.proxyConfiguration)
@@ -453,27 +453,15 @@ public interface Builder extends SdkHttpClient.Builder<Apache5HttpClient.Builder
453453
*/
454454
Builder dnsResolver(DnsResolver dnsResolver);
455455

456-
/**
457-
* @deprecated this has been replaced with {@link #tlsSocketStrategy(TlsSocketStrategy)}.
458-
* This method is retained for backwards compatibility to ease migration from Apache HttpClient 4.5.x.
459-
* Configuration that defines a custom Socket factory. If set to a null value, a default factory is used.
460-
* <p>
461-
* When set to a non-null value, the use of a custom factory implies the configuration options TRUST_ALL_CERTIFICATES,
462-
* TLS_TRUST_MANAGERS_PROVIDER, and TLS_KEY_MANAGERS_PROVIDER are ignored.
463-
*/
464-
@Deprecated
465-
Builder socketFactory(ConnectionSocketFactory socketFactory);
466-
467456
/**
468457
* Configure a custom TLS strategy for SSL/TLS connections.
469-
* This is the preferred method over the deprecated {@link #socketFactory(ConnectionSocketFactory)}.
458+
* This is the preferred method over the {@link ConnectionSocketFactory)}.
470459
*
471460
* @param tlsSocketStrategy The TLS strategy to use for upgrading connections to TLS.
472461
* If null, default TLS configuration will be used.
473462
* @return This builder for method chaining
474463
475464
*/
476-
477465
Builder tlsSocketStrategy(TlsSocketStrategy tlsSocketStrategy);
478466

479467
/**
@@ -532,7 +520,6 @@ private static final class DefaultBuilder implements Builder {
532520
private HttpRoutePlanner httpRoutePlanner;
533521
private CredentialsProvider credentialsProvider;
534522
private DnsResolver dnsResolver;
535-
private ConnectionSocketFactory legacyConnectionSocketFactory;
536523
private TlsSocketStrategy tlsStrategy;
537524

538525
private DefaultBuilder() {
@@ -654,16 +641,6 @@ public void setDnsResolver(DnsResolver dnsResolver) {
654641
dnsResolver(dnsResolver);
655642
}
656643

657-
@Override
658-
public Builder socketFactory(ConnectionSocketFactory socketFactory) {
659-
this.legacyConnectionSocketFactory = socketFactory;
660-
return this;
661-
}
662-
663-
public void setSocketFactory(ConnectionSocketFactory socketFactory) {
664-
socketFactory(socketFactory);
665-
}
666-
667644
@Override
668645
public Builder tlsSocketStrategy(TlsSocketStrategy tlsSocketStrategy) {
669646
this.tlsStrategy = tlsSocketStrategy;
@@ -738,54 +715,46 @@ public SdkHttpClient buildWithDefaults(AttributeMap serviceDefaults) {
738715
SdkHttpConfigurationOption.GLOBAL_HTTP_DEFAULTS);
739716
return new Apache5HttpClient(this, resolvedOptions);
740717
}
741-
742-
// Internal method to get the effective TLS strategy
743-
TlsSocketStrategy getEffectiveTlsStrategy() {
744-
if (tlsStrategy != null) {
745-
return tlsStrategy;
746-
}
747-
if (legacyConnectionSocketFactory != null) {
748-
return new ConnectionSocketFactoryToTlsStrategyAdapter(legacyConnectionSocketFactory);
749-
}
750-
return null;
751-
}
752718
}
753719

754720
private static class ApacheConnectionManagerFactory {
755721

756722
public PoolingHttpClientConnectionManager create(Apache5HttpClient.DefaultBuilder configuration,
757723
AttributeMap standardOptions) {
758724

759-
Validate.isTrue(configuration.tlsStrategy == null || configuration.legacyConnectionSocketFactory == null,
760-
"Cannot configure both tlsSocketStrategy and socketFactory. "
761-
+ "The connectionSocketFactory is deprecated; use tlsSocketStrategy for new implementations.");
762-
763725
TlsSocketStrategy tlsStrategy = getPreferredTlsStrategy(configuration, standardOptions);
764726

765727
PoolingHttpClientConnectionManagerBuilder builder =
766728
PoolingHttpClientConnectionManagerBuilder.create()
767729
.setTlsSocketStrategy(tlsStrategy)
768730
.setSchemePortResolver(DefaultSchemePortResolver.INSTANCE)
769731
.setDnsResolver(configuration.dnsResolver);
732+
builder.setMaxConnPerRoute(standardOptions.get(SdkHttpConfigurationOption.MAX_CONNECTIONS));
733+
builder.setMaxConnTotal(standardOptions.get(SdkHttpConfigurationOption.MAX_CONNECTIONS));
734+
builder.setDefaultSocketConfig(buildSocketConfig(standardOptions));
735+
builder.setDefaultConnectionConfig(getConnectionConfig(standardOptions));
736+
return builder.build();
737+
}
770738

771-
739+
private static ConnectionConfig getConnectionConfig(AttributeMap standardOptions) {
740+
ConnectionConfig.Builder connectionConfigBuilder =
741+
ConnectionConfig.custom()
742+
.setConnectTimeout(Timeout.ofMilliseconds(
743+
standardOptions.get(SdkHttpConfigurationOption.CONNECTION_TIMEOUT).toMillis()))
744+
.setSocketTimeout(Timeout.ofMilliseconds(
745+
standardOptions.get(SdkHttpConfigurationOption.READ_TIMEOUT).toMillis()));
772746
Duration connectionTtl = standardOptions.get(SdkHttpConfigurationOption.CONNECTION_TIME_TO_LIVE);
773747
if (!connectionTtl.isZero()) {
774748
// Skip TTL=0 to maintain backward compatibility (infinite in 4.x vs immediate expiration in 5.x)
775-
builder.setConnectionTimeToLive(TimeValue.of(connectionTtl.toMillis(), TimeUnit.MILLISECONDS));
749+
connectionConfigBuilder.setTimeToLive(TimeValue.ofMilliseconds(connectionTtl.toMillis()));
776750
}
777-
builder.setMaxConnPerRoute(standardOptions.get(SdkHttpConfigurationOption.MAX_CONNECTIONS));
778-
builder.setMaxConnTotal(standardOptions.get(SdkHttpConfigurationOption.MAX_CONNECTIONS));
779-
builder.setDefaultSocketConfig(buildSocketConfig(standardOptions));
780-
return builder.build();
751+
return connectionConfigBuilder.build();
781752
}
782753

783754
private TlsSocketStrategy getPreferredTlsStrategy(Apache5HttpClient.DefaultBuilder configuration,
784755
AttributeMap standardOptions) {
785-
// Use the effective strategy which handles both legacy and new approaches
786-
TlsSocketStrategy configuredStrategy = configuration.getEffectiveTlsStrategy();
787-
if (configuredStrategy != null) {
788-
return configuredStrategy;
756+
if (configuration.tlsStrategy != null) {
757+
return configuration.tlsStrategy;
789758
}
790759
return new SdkTlsSocketFactory(getSslContext(standardOptions),
791760
getHostNameVerifier(standardOptions));
@@ -860,7 +829,6 @@ private SocketConfig buildSocketConfig(AttributeMap standardOptions) {
860829
.build();
861830
}
862831

863-
864832
}
865833

866834
private static class LocalAddressRoutePlanner extends DefaultRoutePlanner {

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,12 @@
2727
public final class Apache5HttpRequestConfig {
2828

2929
private final Duration socketTimeout;
30-
private final Duration connectionTimeout;
3130
private final Duration connectionAcquireTimeout;
3231
private final boolean expectContinueEnabled;
3332
private final ProxyConfiguration proxyConfiguration;
3433

3534
private Apache5HttpRequestConfig(Builder builder) {
3635
this.socketTimeout = builder.socketTimeout;
37-
this.connectionTimeout = builder.connectionTimeout;
3836
this.connectionAcquireTimeout = builder.connectionAcquireTimeout;
3937
this.expectContinueEnabled = builder.expectContinueEnabled;
4038
this.proxyConfiguration = builder.proxyConfiguration;
@@ -44,10 +42,6 @@ public Duration socketTimeout() {
4442
return socketTimeout;
4543
}
4644

47-
public Duration connectionTimeout() {
48-
return connectionTimeout;
49-
}
50-
5145
public Duration connectionAcquireTimeout() {
5246
return connectionAcquireTimeout;
5347
}
@@ -73,7 +67,6 @@ public static Builder builder() {
7367
public static final class Builder {
7468

7569
private Duration socketTimeout;
76-
private Duration connectionTimeout;
7770
private Duration connectionAcquireTimeout;
7871
private boolean expectContinueEnabled;
7972
private ProxyConfiguration proxyConfiguration;
@@ -86,11 +79,6 @@ public Builder socketTimeout(Duration socketTimeout) {
8679
return this;
8780
}
8881

89-
public Builder connectionTimeout(Duration connectionTimeout) {
90-
this.connectionTimeout = connectionTimeout;
91-
return this;
92-
}
93-
9482
public Builder connectionAcquireTimeout(Duration connectionAcquireTimeout) {
9583
this.connectionAcquireTimeout = connectionAcquireTimeout;
9684
return this;

http-clients/apache5-client/src/main/java/software/amazon/awssdk/http/apache5/internal/conn/ConnectionSocketFactoryToTlsStrategyAdapter.java

Lines changed: 0 additions & 71 deletions
This file was deleted.

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class Apache5HttpRequestFactory {
5252
private static final List<String> IGNORE_HEADERS = Arrays.asList(HttpHeaders.CONTENT_LENGTH, HttpHeaders.HOST,
5353
HttpHeaders.TRANSFER_ENCODING);
5454

55-
public HttpUriRequestBase create(final HttpExecuteRequest request, final Apache5HttpRequestConfig requestConfig) {
55+
public HttpUriRequestBase create(HttpExecuteRequest request, Apache5HttpRequestConfig requestConfig) {
5656
HttpUriRequestBase base = createApacheRequest(request, sanitizeUri(request.httpRequest()));
5757
addHeadersToRequest(base, request.httpRequest());
5858
addRequestConfig(base, request.httpRequest(), requestConfig);
@@ -90,12 +90,10 @@ private URI sanitizeUri(SdkHttpRequest request) {
9090
private void addRequestConfig(HttpUriRequestBase base,
9191
SdkHttpRequest request,
9292
Apache5HttpRequestConfig requestConfig) {
93-
int connectTimeout = saturatedCast(requestConfig.connectionTimeout().toMillis());
9493
int connectAcquireTimeout = saturatedCast(requestConfig.connectionAcquireTimeout().toMillis());
9594
RequestConfig.Builder requestConfigBuilder = RequestConfig
9695
.custom()
9796
.setConnectionRequestTimeout(connectAcquireTimeout, TimeUnit.MILLISECONDS)
98-
.setConnectTimeout(connectTimeout, TimeUnit.MILLISECONDS)
9997
.setResponseTimeout(saturatedCast(requestConfig.socketTimeout().toMillis()), TimeUnit.MILLISECONDS);
10098

10199
/*

http-clients/apache5-client/src/main/java/software/amazon/awssdk/http/apache5/internal/utils/Apache5Utils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public static CredentialsProvider newProxyCredentialsProvider(ProxyConfiguration
7979
* Returns a new instance of NTCredentials used for proxy authentication.
8080
*/
8181
private static Credentials newNtCredentials(ProxyConfiguration proxyConfiguration) {
82+
// Deprecated NTCredentials is used to maintain backward compatibility with Apache4.
8283
return new NTCredentials(
8384
proxyConfiguration.username(),
8485
proxyConfiguration.password().toCharArray(),

0 commit comments

Comments
 (0)