1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.impl.io;
29
30 import javax.net.ssl.SSLSocket;
31
32 import org.apache.hc.client5.http.DnsResolver;
33 import org.apache.hc.client5.http.HttpRoute;
34 import org.apache.hc.client5.http.SchemePortResolver;
35 import org.apache.hc.client5.http.config.ConnectionConfig;
36 import org.apache.hc.client5.http.config.TlsConfig;
37 import org.apache.hc.client5.http.io.ManagedHttpClientConnection;
38 import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
39 import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
40 import org.apache.hc.core5.function.Resolver;
41 import org.apache.hc.core5.http.HttpHost;
42 import org.apache.hc.core5.http.URIScheme;
43 import org.apache.hc.core5.http.config.RegistryBuilder;
44 import org.apache.hc.core5.http.io.HttpConnectionFactory;
45 import org.apache.hc.core5.http.io.SocketConfig;
46 import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
47 import org.apache.hc.core5.pool.PoolReusePolicy;
48 import org.apache.hc.core5.util.TimeValue;
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 public class PoolingHttpClientConnectionManagerBuilder {
77
78 private HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory;
79 private TlsSocketStrategy tlsSocketStrategy;
80 private SchemePortResolver schemePortResolver;
81 private DnsResolver dnsResolver;
82 private PoolConcurrencyPolicy poolConcurrencyPolicy;
83 private PoolReusePolicy poolReusePolicy;
84 private Resolver<HttpRoute, SocketConfig> socketConfigResolver;
85 private Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver;
86 private Resolver<HttpHost, TlsConfig> tlsConfigResolver;
87
88 private boolean systemProperties;
89
90 private int maxConnTotal;
91 private int maxConnPerRoute;
92
93 public static PoolingHttpClientConnectionManagerBuilder create() {
94 return new PoolingHttpClientConnectionManagerBuilder();
95 }
96
97 PoolingHttpClientConnectionManagerBuilder() {
98 super();
99 }
100
101
102
103
104 public final PoolingHttpClientConnectionManagerBuilder setConnectionFactory(
105 final HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory) {
106 this.connectionFactory = connectionFactory;
107 return this;
108 }
109
110
111
112
113
114
115 @Deprecated
116 public final PoolingHttpClientConnectionManagerBuilder setSSLSocketFactory(
117 final org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory sslSocketFactory) {
118 this.tlsSocketStrategy = (socket, target, port, attachment, context) ->
119 (SSLSocket) sslSocketFactory.createLayeredSocket(socket, target, port, context);
120 return this;
121 }
122
123
124
125
126 public final PoolingHttpClientConnectionManagerBuilder setTlsSocketStrategy(final TlsSocketStrategy tlsSocketStrategy) {
127 this.tlsSocketStrategy = tlsSocketStrategy;
128 return this;
129 }
130
131
132
133
134 public final PoolingHttpClientConnectionManagerBuilder setDnsResolver(final DnsResolver dnsResolver) {
135 this.dnsResolver = dnsResolver;
136 return this;
137 }
138
139
140
141
142 public final PoolingHttpClientConnectionManagerBuilder setSchemePortResolver(final SchemePortResolver schemePortResolver) {
143 this.schemePortResolver = schemePortResolver;
144 return this;
145 }
146
147
148
149
150 public final PoolingHttpClientConnectionManagerBuilder setPoolConcurrencyPolicy(final PoolConcurrencyPolicy poolConcurrencyPolicy) {
151 this.poolConcurrencyPolicy = poolConcurrencyPolicy;
152 return this;
153 }
154
155
156
157
158 public final PoolingHttpClientConnectionManagerBuilder setConnPoolPolicy(final PoolReusePolicy poolReusePolicy) {
159 this.poolReusePolicy = poolReusePolicy;
160 return this;
161 }
162
163
164
165
166 public final PoolingHttpClientConnectionManagerBuilder setMaxConnTotal(final int maxConnTotal) {
167 this.maxConnTotal = maxConnTotal;
168 return this;
169 }
170
171
172
173
174 public final PoolingHttpClientConnectionManagerBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
175 this.maxConnPerRoute = maxConnPerRoute;
176 return this;
177 }
178
179
180
181
182 public final PoolingHttpClientConnectionManagerBuilder setDefaultSocketConfig(final SocketConfig config) {
183 this.socketConfigResolver = (route) -> config;
184 return this;
185 }
186
187
188
189
190
191
192 public final PoolingHttpClientConnectionManagerBuilder setSocketConfigResolver(
193 final Resolver<HttpRoute, SocketConfig> socketConfigResolver) {
194 this.socketConfigResolver = socketConfigResolver;
195 return this;
196 }
197
198
199
200
201
202
203 public final PoolingHttpClientConnectionManagerBuilder setDefaultConnectionConfig(final ConnectionConfig config) {
204 this.connectionConfigResolver = (route) -> config;
205 return this;
206 }
207
208
209
210
211
212
213 public final PoolingHttpClientConnectionManagerBuilder setConnectionConfigResolver(
214 final Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver) {
215 this.connectionConfigResolver = connectionConfigResolver;
216 return this;
217 }
218
219
220
221
222
223
224 public final PoolingHttpClientConnectionManagerBuilder setDefaultTlsConfig(final TlsConfig config) {
225 this.tlsConfigResolver = (host) -> config;
226 return this;
227 }
228
229
230
231
232
233
234 public final PoolingHttpClientConnectionManagerBuilder setTlsConfigResolver(
235 final Resolver<HttpHost, TlsConfig> tlsConfigResolver) {
236 this.tlsConfigResolver = tlsConfigResolver;
237 return this;
238 }
239
240
241
242
243
244
245 @Deprecated
246 public final PoolingHttpClientConnectionManagerBuilder setConnectionTimeToLive(final TimeValue timeToLive) {
247 setDefaultConnectionConfig(ConnectionConfig.custom()
248 .setTimeToLive(timeToLive)
249 .build());
250 return this;
251 }
252
253
254
255
256
257
258
259 @Deprecated
260 public final PoolingHttpClientConnectionManagerBuilder setValidateAfterInactivity(final TimeValue validateAfterInactivity) {
261 setDefaultConnectionConfig(ConnectionConfig.custom()
262 .setValidateAfterInactivity(validateAfterInactivity)
263 .build());
264 return this;
265 }
266
267
268
269
270
271 public final PoolingHttpClientConnectionManagerBuilder useSystemProperties() {
272 this.systemProperties = true;
273 return this;
274 }
275
276 public PoolingHttpClientConnectionManager build() {
277 final PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(
278 new DefaultHttpClientConnectionOperator(schemePortResolver, dnsResolver,
279 RegistryBuilder.<TlsSocketStrategy>create()
280 .register(URIScheme.HTTPS.id, tlsSocketStrategy != null ? tlsSocketStrategy :
281 (systemProperties ?
282 DefaultClientTlsStrategy.createSystemDefault() :
283 DefaultClientTlsStrategy.createDefault()))
284 .build()),
285 poolConcurrencyPolicy,
286 poolReusePolicy,
287 null,
288 connectionFactory);
289 poolingmgr.setSocketConfigResolver(socketConfigResolver);
290 poolingmgr.setConnectionConfigResolver(connectionConfigResolver);
291 poolingmgr.setTlsConfigResolver(tlsConfigResolver);
292 if (maxConnTotal > 0) {
293 poolingmgr.setMaxTotal(maxConnTotal);
294 }
295 if (maxConnPerRoute > 0) {
296 poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
297 }
298 return poolingmgr;
299 }
300
301 }