Skip to content

Commit 0ca8f6d

Browse files
committed
Replace calls to deprecated setConnectionTimeout method
Replace calls to the recently deprecated `setConnectionTimeout` method of `HttpComponentsClientHttpRequestFactory` and align the HTTP client builder with the HTTP async client builder. This commit also introduces a `withConnectionConfigCustomizer` and allows connection timeouts settings to be used. Closes gh-47940
1 parent e02804c commit 0ca8f6d

File tree

7 files changed

+129
-64
lines changed

7 files changed

+129
-64
lines changed

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ void clientHttpRequestFactoryBuilderCustomizersAreApplied() {
142142
this.contextRunner.withUserConfiguration(ClientHttpRequestFactoryBuilderCustomizersConfiguration.class)
143143
.run((context) -> {
144144
ClientHttpRequestFactory factory = context.getBean(ClientHttpRequestFactoryBuilder.class).build();
145-
assertThat(factory).extracting("connectTimeout").isEqualTo(5L);
145+
assertThat(factory).extracting("readTimeout").isEqualTo(5L);
146146
});
147147
}
148148

@@ -151,7 +151,7 @@ static class ClientHttpRequestFactoryBuilderCustomizersConfiguration {
151151

152152
@Bean
153153
ClientHttpRequestFactoryBuilderCustomizer<HttpComponentsClientHttpRequestFactoryBuilder> httpComponentsCustomizer() {
154-
return (builder) -> builder.withCustomizer((factory) -> factory.setConnectTimeout(5));
154+
return (builder) -> builder.withCustomizer((factory) -> factory.setReadTimeout(5));
155155
}
156156

157157
@Bean

spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import javax.net.ssl.SSLContext;
3333

3434
import org.apache.hc.client5.http.classic.HttpClient;
35+
import org.apache.hc.client5.http.config.ConnectionConfig;
3536
import org.apache.hc.client5.http.config.RequestConfig;
3637
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
3738
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
@@ -41,7 +42,6 @@
4142
import org.apache.hc.client5.http.protocol.HttpClientContext;
4243
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
4344
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
44-
import org.apache.hc.core5.http.io.SocketConfig;
4545
import org.apache.hc.core5.http.protocol.HttpContext;
4646
import org.apache.hc.core5.http.ssl.TLS;
4747
import org.apache.hc.core5.ssl.SSLContextBuilder;
@@ -1114,18 +1114,15 @@ public CustomHttpComponentsClientHttpRequestFactory(HttpClientOption[] httpClien
11141114
: StandardCookieSpec.IGNORE);
11151115
this.enableRedirects = settings.redirects() != Redirects.DONT_FOLLOW;
11161116
boolean ssl = HttpClientOption.SSL.isPresent(httpClientOptions);
1117-
if (settings.readTimeout() != null || ssl) {
1118-
setHttpClient(createHttpClient(settings.readTimeout(), ssl));
1119-
}
1120-
if (settings.connectTimeout() != null) {
1121-
setConnectTimeout((int) settings.connectTimeout().toMillis());
1117+
if (settings.connectTimeout() != null || settings.readTimeout() != null || ssl) {
1118+
setHttpClient(createHttpClient(settings.connectTimeout(), settings.readTimeout(), ssl));
11221119
}
11231120
}
11241121

1125-
private HttpClient createHttpClient(Duration readTimeout, boolean ssl) {
1122+
private HttpClient createHttpClient(Duration connectTimeout, Duration readTimeout, boolean ssl) {
11261123
try {
11271124
HttpClientBuilder builder = HttpClients.custom();
1128-
builder.setConnectionManager(createConnectionManager(readTimeout, ssl));
1125+
builder.setConnectionManager(createConnectionManager(connectTimeout, readTimeout, ssl));
11291126
builder.setDefaultRequestConfig(createRequestConfig());
11301127
return builder.build();
11311128
}
@@ -1134,18 +1131,23 @@ private HttpClient createHttpClient(Duration readTimeout, boolean ssl) {
11341131
}
11351132
}
11361133

1137-
private PoolingHttpClientConnectionManager createConnectionManager(Duration readTimeout, boolean ssl)
1134+
private PoolingHttpClientConnectionManager createConnectionManager(Duration connectTimeout,
1135+
Duration readTimeout, boolean ssl)
11381136
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException {
11391137
PoolingHttpClientConnectionManagerBuilder builder = PoolingHttpClientConnectionManagerBuilder.create();
1138+
if (connectTimeout != null || readTimeout != null) {
1139+
ConnectionConfig.Builder connectionConfig = ConnectionConfig.custom();
1140+
if (connectTimeout != null) {
1141+
connectionConfig.setConnectTimeout(connectTimeout.toMillis(), TimeUnit.MILLISECONDS);
1142+
}
1143+
if (readTimeout != null) {
1144+
connectionConfig.setSocketTimeout((int) readTimeout.toMillis(), TimeUnit.MILLISECONDS);
1145+
}
1146+
builder.setDefaultConnectionConfig(connectionConfig.build());
1147+
}
11401148
if (ssl) {
11411149
builder.setTlsSocketStrategy(createTlsSocketStrategy());
11421150
}
1143-
if (readTimeout != null) {
1144-
SocketConfig socketConfig = SocketConfig.custom()
1145-
.setSoTimeout((int) readTimeout.toMillis(), TimeUnit.MILLISECONDS)
1146-
.build();
1147-
builder.setDefaultSocketConfig(socketConfig);
1148-
}
11491151
return builder.build();
11501152
}
11511153

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsClientHttpRequestFactoryBuilder.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,19 @@
1616

1717
package org.springframework.boot.http.client;
1818

19-
import java.time.Duration;
2019
import java.util.Collection;
2120
import java.util.List;
2221
import java.util.function.Consumer;
2322
import java.util.function.Function;
2423

2524
import org.apache.hc.client5.http.classic.HttpClient;
25+
import org.apache.hc.client5.http.config.ConnectionConfig;
2626
import org.apache.hc.client5.http.config.RequestConfig;
2727
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
2828
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
2929
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
3030
import org.apache.hc.core5.http.io.SocketConfig;
3131

32-
import org.springframework.boot.context.properties.PropertyMapper;
3332
import org.springframework.boot.ssl.SslBundle;
3433
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
3534
import org.springframework.util.Assert;
@@ -113,6 +112,21 @@ public HttpComponentsClientHttpRequestFactoryBuilder withSocketConfigCustomizer(
113112
this.httpClientBuilder.withSocketConfigCustomizer(socketConfigCustomizer));
114113
}
115114

115+
/**
116+
* Return a new {@link HttpComponentsHttpClientBuilder} that applies additional
117+
* customization to the underlying
118+
* {@link org.apache.hc.client5.http.config.ConnectionConfig.Builder}.
119+
* @param connectionConfigCustomizer the customizer to apply
120+
* @return a new {@link HttpComponentsHttpClientBuilder} instance
121+
* @since 3.5.8
122+
*/
123+
public HttpComponentsClientHttpRequestFactoryBuilder withConnectionConfigCustomizer(
124+
Consumer<ConnectionConfig.Builder> connectionConfigCustomizer) {
125+
Assert.notNull(connectionConfigCustomizer, "'connectionConfigCustomizer' must not be null");
126+
return new HttpComponentsClientHttpRequestFactoryBuilder(getCustomizers(),
127+
this.httpClientBuilder.withConnectionConfigCustomizer(connectionConfigCustomizer));
128+
}
129+
116130
/**
117131
* Return a new {@link HttpComponentsClientHttpRequestFactoryBuilder} with a
118132
* replacement {@link TlsSocketStrategy} factory.
@@ -145,11 +159,8 @@ public HttpComponentsClientHttpRequestFactoryBuilder withDefaultRequestConfigCus
145159
@Override
146160
protected HttpComponentsClientHttpRequestFactory createClientHttpRequestFactory(
147161
ClientHttpRequestFactorySettings settings) {
148-
HttpClient httpClient = this.httpClientBuilder.build(asHttpClientSettings(settings.withConnectTimeout(null)));
149-
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
150-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
151-
map.from(settings::connectTimeout).asInt(Duration::toMillis).to(factory::setConnectTimeout);
152-
return factory;
162+
HttpClient httpClient = this.httpClientBuilder.build(asHttpClientSettings(settings));
163+
return new HttpComponentsClientHttpRequestFactory(httpClient);
153164
}
154165

155166
static class Classes {

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsHttpClientBuilder.java

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.function.Consumer;
2323
import java.util.function.Function;
2424

25+
import org.apache.hc.client5.http.config.ConnectionConfig;
2526
import org.apache.hc.client5.http.config.RequestConfig;
2627
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2728
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
@@ -52,23 +53,27 @@ public final class HttpComponentsHttpClientBuilder {
5253

5354
private final Consumer<SocketConfig.Builder> socketConfigCustomizer;
5455

56+
private final Consumer<ConnectionConfig.Builder> connectionConfigCustomizer;
57+
5558
private final Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer;
5659

5760
private final Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory;
5861

5962
public HttpComponentsHttpClientBuilder() {
60-
this(Empty.consumer(), Empty.consumer(), Empty.consumer(), Empty.consumer(),
63+
this(Empty.consumer(), Empty.consumer(), Empty.consumer(), Empty.consumer(), Empty.consumer(),
6164
HttpComponentsSslBundleTlsStrategy::get);
6265
}
6366

6467
private HttpComponentsHttpClientBuilder(Consumer<HttpClientBuilder> customizer,
6568
Consumer<PoolingHttpClientConnectionManagerBuilder> connectionManagerCustomizer,
6669
Consumer<SocketConfig.Builder> socketConfigCustomizer,
70+
Consumer<ConnectionConfig.Builder> connectionConfigCustomizer,
6771
Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer,
6872
Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory) {
6973
this.customizer = customizer;
7074
this.connectionManagerCustomizer = connectionManagerCustomizer;
7175
this.socketConfigCustomizer = socketConfigCustomizer;
76+
this.connectionConfigCustomizer = connectionConfigCustomizer;
7277
this.defaultRequestConfigCustomizer = defaultRequestConfigCustomizer;
7378
this.tlsSocketStrategyFactory = tlsSocketStrategyFactory;
7479
}
@@ -82,8 +87,8 @@ private HttpComponentsHttpClientBuilder(Consumer<HttpClientBuilder> customizer,
8287
public HttpComponentsHttpClientBuilder withCustomizer(Consumer<HttpClientBuilder> customizer) {
8388
Assert.notNull(customizer, "'customizer' must not be null");
8489
return new HttpComponentsHttpClientBuilder(this.customizer.andThen(customizer),
85-
this.connectionManagerCustomizer, this.socketConfigCustomizer, this.defaultRequestConfigCustomizer,
86-
this.tlsSocketStrategyFactory);
90+
this.connectionManagerCustomizer, this.socketConfigCustomizer, this.connectionConfigCustomizer,
91+
this.defaultRequestConfigCustomizer, this.tlsSocketStrategyFactory);
8792
}
8893

8994
/**
@@ -97,7 +102,7 @@ public HttpComponentsHttpClientBuilder withConnectionManagerCustomizer(
97102
Assert.notNull(connectionManagerCustomizer, "'connectionManagerCustomizer' must not be null");
98103
return new HttpComponentsHttpClientBuilder(this.customizer,
99104
this.connectionManagerCustomizer.andThen(connectionManagerCustomizer), this.socketConfigCustomizer,
100-
this.defaultRequestConfigCustomizer, this.tlsSocketStrategyFactory);
105+
this.connectionConfigCustomizer, this.defaultRequestConfigCustomizer, this.tlsSocketStrategyFactory);
101106
}
102107

103108
/**
@@ -111,8 +116,24 @@ public HttpComponentsHttpClientBuilder withSocketConfigCustomizer(
111116
Consumer<SocketConfig.Builder> socketConfigCustomizer) {
112117
Assert.notNull(socketConfigCustomizer, "'socketConfigCustomizer' must not be null");
113118
return new HttpComponentsHttpClientBuilder(this.customizer, this.connectionManagerCustomizer,
114-
this.socketConfigCustomizer.andThen(socketConfigCustomizer), this.defaultRequestConfigCustomizer,
115-
this.tlsSocketStrategyFactory);
119+
this.socketConfigCustomizer.andThen(socketConfigCustomizer), this.connectionConfigCustomizer,
120+
this.defaultRequestConfigCustomizer, this.tlsSocketStrategyFactory);
121+
}
122+
123+
/**
124+
* Return a new {@link HttpComponentsHttpClientBuilder} that applies additional
125+
* customization to the underlying
126+
* {@link org.apache.hc.client5.http.config.ConnectionConfig.Builder}.
127+
* @param connectionConfigCustomizer the customizer to apply
128+
* @return a new {@link HttpComponentsHttpClientBuilder} instance
129+
* @since 3.5.8
130+
*/
131+
public HttpComponentsHttpClientBuilder withConnectionConfigCustomizer(
132+
Consumer<ConnectionConfig.Builder> connectionConfigCustomizer) {
133+
Assert.notNull(connectionConfigCustomizer, "'connectionConfigCustomizer' must not be null");
134+
return new HttpComponentsHttpClientBuilder(this.customizer, this.connectionManagerCustomizer,
135+
this.socketConfigCustomizer.andThen(this.socketConfigCustomizer), this.connectionConfigCustomizer,
136+
this.defaultRequestConfigCustomizer, this.tlsSocketStrategyFactory);
116137
}
117138

118139
/**
@@ -128,7 +149,8 @@ public HttpComponentsHttpClientBuilder withTlsSocketStrategyFactory(
128149
Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory) {
129150
Assert.notNull(tlsSocketStrategyFactory, "'tlsSocketStrategyFactory' must not be null");
130151
return new HttpComponentsHttpClientBuilder(this.customizer, this.connectionManagerCustomizer,
131-
this.socketConfigCustomizer, this.defaultRequestConfigCustomizer, tlsSocketStrategyFactory);
152+
this.socketConfigCustomizer, this.connectionConfigCustomizer, this.defaultRequestConfigCustomizer,
153+
tlsSocketStrategyFactory);
132154
}
133155

134156
/**
@@ -143,7 +165,7 @@ public HttpComponentsHttpClientBuilder withDefaultRequestConfigCustomizer(
143165
Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer) {
144166
Assert.notNull(defaultRequestConfigCustomizer, "'defaultRequestConfigCustomizer' must not be null");
145167
return new HttpComponentsHttpClientBuilder(this.customizer, this.connectionManagerCustomizer,
146-
this.socketConfigCustomizer,
168+
this.socketConfigCustomizer, this.connectionConfigCustomizer,
147169
this.defaultRequestConfigCustomizer.andThen(defaultRequestConfigCustomizer),
148170
this.tlsSocketStrategyFactory);
149171
}
@@ -155,7 +177,6 @@ public HttpComponentsHttpClientBuilder withDefaultRequestConfigCustomizer(
155177
*/
156178
public CloseableHttpClient build(HttpClientSettings settings) {
157179
settings = (settings != null) ? settings : HttpClientSettings.DEFAULTS;
158-
Assert.isTrue(settings.connectTimeout() == null, "'settings' must not have a 'connectTimeout'");
159180
HttpClientBuilder builder = HttpClientBuilder.create()
160181
.useSystemProperties()
161182
.setRedirectStrategy(HttpComponentsRedirectStrategy.get(settings.redirects()))
@@ -169,19 +190,29 @@ private PoolingHttpClientConnectionManager createConnectionManager(HttpClientSet
169190
PoolingHttpClientConnectionManagerBuilder builder = PoolingHttpClientConnectionManagerBuilder.create()
170191
.useSystemProperties();
171192
PropertyMapper map = PropertyMapper.get();
172-
builder.setDefaultSocketConfig(createSocketConfig(settings));
193+
builder.setDefaultSocketConfig(createSocketConfig());
194+
builder.setDefaultConnectionConfig(createConnectionConfig(settings));
173195
map.from(settings::sslBundle).as(this.tlsSocketStrategyFactory).whenNonNull().to(builder::setTlsSocketStrategy);
174196
this.connectionManagerCustomizer.accept(builder);
175197
return builder.build();
176198
}
177199

178-
private SocketConfig createSocketConfig(HttpClientSettings settings) {
200+
private SocketConfig createSocketConfig() {
179201
SocketConfig.Builder builder = SocketConfig.custom();
202+
this.socketConfigCustomizer.accept(builder);
203+
return builder.build();
204+
}
205+
206+
private ConnectionConfig createConnectionConfig(HttpClientSettings settings) {
207+
ConnectionConfig.Builder builder = ConnectionConfig.custom();
180208
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
209+
map.from(settings::connectTimeout)
210+
.as(Duration::toMillis)
211+
.to((timeout) -> builder.setConnectTimeout(timeout, TimeUnit.MILLISECONDS));
181212
map.from(settings::readTimeout)
182213
.asInt(Duration::toMillis)
183-
.to((timeout) -> builder.setSoTimeout(timeout, TimeUnit.MILLISECONDS));
184-
this.socketConfigCustomizer.accept(builder);
214+
.to((timeout) -> builder.setSocketTimeout(timeout, TimeUnit.MILLISECONDS));
215+
this.connectionConfigCustomizer.accept(builder);
185216
return builder.build();
186217
}
187218

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/http/client/HttpComponentsClientHttpRequestFactoryBuilderTests.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
import java.util.function.Function;
2222

2323
import org.apache.hc.client5.http.HttpRoute;
24-
import org.apache.hc.client5.http.classic.HttpClient;
24+
import org.apache.hc.client5.http.config.ConnectionConfig;
2525
import org.apache.hc.client5.http.config.RequestConfig;
26+
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2627
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
2728
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
2829
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
@@ -95,18 +96,22 @@ void withTlsSocketStrategyFactory() {
9596

9697
@Override
9798
protected long connectTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
98-
return (long) ReflectionTestUtils.getField(requestFactory, "connectTimeout");
99+
return getConnectorConfig(requestFactory).getConnectTimeout().toMilliseconds();
99100
}
100101

101102
@Override
102-
@SuppressWarnings("unchecked")
103103
protected long readTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
104-
HttpClient httpClient = requestFactory.getHttpClient();
105-
Object connectionManager = ReflectionTestUtils.getField(httpClient, "connManager");
106-
SocketConfig socketConfig = ((Resolver<HttpRoute, SocketConfig>) ReflectionTestUtils.getField(connectionManager,
107-
"socketConfigResolver"))
108-
.resolve(null);
109-
return socketConfig.getSoTimeout().toMilliseconds();
104+
return getConnectorConfig(requestFactory).getSocketTimeout().toMilliseconds();
105+
}
106+
107+
@SuppressWarnings("unchecked")
108+
private ConnectionConfig getConnectorConfig(HttpComponentsClientHttpRequestFactory requestFactory) {
109+
CloseableHttpClient httpClient = (CloseableHttpClient) ReflectionTestUtils.getField(requestFactory,
110+
"httpClient");
111+
Object manager = ReflectionTestUtils.getField(httpClient, "connManager");
112+
ConnectionConfig connectorConfig = ((Resolver<HttpRoute, ConnectionConfig>) ReflectionTestUtils
113+
.getField(manager, "connectionConfigResolver")).resolve(null);
114+
return connectorConfig;
110115
}
111116

112117
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesHttpComponentsTests.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
package org.springframework.boot.web.client;
1818

1919
import org.apache.hc.client5.http.HttpRoute;
20-
import org.apache.hc.client5.http.classic.HttpClient;
20+
import org.apache.hc.client5.http.config.ConnectionConfig;
21+
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2122
import org.apache.hc.core5.function.Resolver;
22-
import org.apache.hc.core5.http.io.SocketConfig;
2323

2424
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
2525
import org.springframework.test.util.ReflectionTestUtils;
@@ -39,29 +39,33 @@ class ClientHttpRequestFactoriesHttpComponentsTests
3939
}
4040

4141
@Override
42-
protected long connectTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
43-
return (long) ReflectionTestUtils.getField(requestFactory, "connectTimeout");
42+
protected boolean supportsSettingConnectTimeout() {
43+
return true;
4444
}
4545

4646
@Override
47-
@SuppressWarnings("unchecked")
48-
protected long readTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
49-
HttpClient httpClient = requestFactory.getHttpClient();
50-
Object connectionManager = ReflectionTestUtils.getField(httpClient, "connManager");
51-
SocketConfig socketConfig = ((Resolver<HttpRoute, SocketConfig>) ReflectionTestUtils.getField(connectionManager,
52-
"socketConfigResolver"))
53-
.resolve(null);
54-
return socketConfig.getSoTimeout().toMilliseconds();
47+
protected boolean supportsSettingReadTimeout() {
48+
return true;
5549
}
5650

5751
@Override
58-
protected boolean supportsSettingConnectTimeout() {
59-
return true;
52+
protected long connectTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
53+
return getConnectorConfig(requestFactory).getConnectTimeout().toMilliseconds();
6054
}
6155

6256
@Override
63-
protected boolean supportsSettingReadTimeout() {
64-
return false;
57+
protected long readTimeout(HttpComponentsClientHttpRequestFactory requestFactory) {
58+
return getConnectorConfig(requestFactory).getSocketTimeout().toMilliseconds();
59+
}
60+
61+
@SuppressWarnings("unchecked")
62+
private ConnectionConfig getConnectorConfig(HttpComponentsClientHttpRequestFactory requestFactory) {
63+
CloseableHttpClient httpClient = (CloseableHttpClient) ReflectionTestUtils.getField(requestFactory,
64+
"httpClient");
65+
Object manager = ReflectionTestUtils.getField(httpClient, "connManager");
66+
ConnectionConfig connectorConfig = ((Resolver<HttpRoute, ConnectionConfig>) ReflectionTestUtils
67+
.getField(manager, "connectionConfigResolver")).resolve(null);
68+
return connectorConfig;
6569
}
6670

6771
}

0 commit comments

Comments
 (0)