1
1
/*
2
- * Copyright 2012-2017 the original author or authors.
2
+ * Copyright 2012-2018 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
27
27
import java .util .LinkedHashSet ;
28
28
import java .util .Map ;
29
29
import java .util .Set ;
30
+ import java .util .function .Supplier ;
30
31
31
32
import org .springframework .beans .BeanUtils ;
32
33
import org .springframework .http .client .AbstractClientHttpRequestFactoryWrapper ;
58
59
* @author Stephane Nicoll
59
60
* @author Phillip Webb
60
61
* @author Andy Wilkinson
62
+ * @author Brian Clozel
61
63
* @since 1.4.0
62
64
*/
63
65
public class RestTemplateBuilder {
@@ -81,7 +83,7 @@ public class RestTemplateBuilder {
81
83
82
84
private final Set <HttpMessageConverter <?>> messageConverters ;
83
85
84
- private final ClientHttpRequestFactory requestFactory ;
86
+ private final Supplier < ClientHttpRequestFactory > requestFactorySupplier ;
85
87
86
88
private final UriTemplateHandler uriTemplateHandler ;
87
89
@@ -105,7 +107,7 @@ public RestTemplateBuilder(RestTemplateCustomizer... customizers) {
105
107
this .detectRequestFactory = true ;
106
108
this .rootUri = null ;
107
109
this .messageConverters = null ;
108
- this .requestFactory = null ;
110
+ this .requestFactorySupplier = null ;
109
111
this .uriTemplateHandler = null ;
110
112
this .errorHandler = null ;
111
113
this .basicAuthorization = null ;
@@ -117,7 +119,7 @@ public RestTemplateBuilder(RestTemplateCustomizer... customizers) {
117
119
118
120
private RestTemplateBuilder (boolean detectRequestFactory , String rootUri ,
119
121
Set <HttpMessageConverter <?>> messageConverters ,
120
- ClientHttpRequestFactory requestFactory ,
122
+ Supplier < ClientHttpRequestFactory > requestFactorySupplier ,
121
123
UriTemplateHandler uriTemplateHandler , ResponseErrorHandler errorHandler ,
122
124
BasicAuthorizationInterceptor basicAuthorization ,
123
125
Set <RestTemplateCustomizer > restTemplateCustomizers ,
@@ -126,7 +128,7 @@ private RestTemplateBuilder(boolean detectRequestFactory, String rootUri,
126
128
this .detectRequestFactory = detectRequestFactory ;
127
129
this .rootUri = rootUri ;
128
130
this .messageConverters = messageConverters ;
129
- this .requestFactory = requestFactory ;
131
+ this .requestFactorySupplier = requestFactorySupplier ;
130
132
this .uriTemplateHandler = uriTemplateHandler ;
131
133
this .errorHandler = errorHandler ;
132
134
this .basicAuthorization = basicAuthorization ;
@@ -144,7 +146,7 @@ private RestTemplateBuilder(boolean detectRequestFactory, String rootUri,
144
146
*/
145
147
public RestTemplateBuilder detectRequestFactory (boolean detectRequestFactory ) {
146
148
return new RestTemplateBuilder (detectRequestFactory , this .rootUri ,
147
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
149
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
148
150
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
149
151
this .requestFactoryCustomizers , this .interceptors );
150
152
}
@@ -157,7 +159,7 @@ public RestTemplateBuilder detectRequestFactory(boolean detectRequestFactory) {
157
159
*/
158
160
public RestTemplateBuilder rootUri (String rootUri ) {
159
161
return new RestTemplateBuilder (this .detectRequestFactory , rootUri ,
160
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
162
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
161
163
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
162
164
this .requestFactoryCustomizers , this .interceptors );
163
165
}
@@ -190,7 +192,7 @@ public RestTemplateBuilder messageConverters(
190
192
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
191
193
Collections .unmodifiableSet (
192
194
new LinkedHashSet <HttpMessageConverter <?>>(messageConverters )),
193
- this .requestFactory , this .uriTemplateHandler , this .errorHandler ,
195
+ this .requestFactorySupplier , this .uriTemplateHandler , this .errorHandler ,
194
196
this .basicAuthorization , this .restTemplateCustomizers ,
195
197
this .requestFactoryCustomizers , this .interceptors );
196
198
}
@@ -219,7 +221,7 @@ public RestTemplateBuilder additionalMessageConverters(
219
221
Collection <? extends HttpMessageConverter <?>> messageConverters ) {
220
222
Assert .notNull (messageConverters , "MessageConverters must not be null" );
221
223
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
222
- append (this .messageConverters , messageConverters ), this .requestFactory ,
224
+ append (this .messageConverters , messageConverters ), this .requestFactorySupplier ,
223
225
this .uriTemplateHandler , this .errorHandler , this .basicAuthorization ,
224
226
this .restTemplateCustomizers , this .requestFactoryCustomizers ,
225
227
this .interceptors );
@@ -236,7 +238,7 @@ public RestTemplateBuilder defaultMessageConverters() {
236
238
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
237
239
Collections .unmodifiableSet (
238
240
new LinkedHashSet <>(new RestTemplate ().getMessageConverters ())),
239
- this .requestFactory , this .uriTemplateHandler , this .errorHandler ,
241
+ this .requestFactorySupplier , this .uriTemplateHandler , this .errorHandler ,
240
242
this .basicAuthorization , this .restTemplateCustomizers ,
241
243
this .requestFactoryCustomizers , this .interceptors );
242
244
}
@@ -269,7 +271,7 @@ public RestTemplateBuilder interceptors(
269
271
Collection <ClientHttpRequestInterceptor > interceptors ) {
270
272
Assert .notNull (interceptors , "interceptors must not be null" );
271
273
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
272
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
274
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
273
275
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
274
276
this .requestFactoryCustomizers ,
275
277
Collections .unmodifiableSet (new LinkedHashSet <>(interceptors )));
@@ -301,7 +303,7 @@ public RestTemplateBuilder additionalInterceptors(
301
303
Collection <? extends ClientHttpRequestInterceptor > interceptors ) {
302
304
Assert .notNull (interceptors , "interceptors must not be null" );
303
305
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
304
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
306
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
305
307
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
306
308
this .requestFactoryCustomizers , append (this .interceptors , interceptors ));
307
309
}
@@ -315,7 +317,7 @@ public RestTemplateBuilder additionalInterceptors(
315
317
public RestTemplateBuilder requestFactory (
316
318
Class <? extends ClientHttpRequestFactory > requestFactory ) {
317
319
Assert .notNull (requestFactory , "RequestFactory must not be null" );
318
- return requestFactory (createRequestFactory (requestFactory ));
320
+ return requestFactory (() -> createRequestFactory (requestFactory ));
319
321
}
320
322
321
323
private ClientHttpRequestFactory createRequestFactory (
@@ -331,15 +333,17 @@ private ClientHttpRequestFactory createRequestFactory(
331
333
}
332
334
333
335
/**
334
- * Set the {@link ClientHttpRequestFactory} that should be used with the
335
- * {@link RestTemplate}.
336
- * @param requestFactory the request factory to use
336
+ * Set the {@code Supplier} of {@link ClientHttpRequestFactory}
337
+ * that should be called each time we {@link #build()} a new
338
+ * {@link RestTemplate} instance.
339
+ * @param requestFactorySupplier the supplier for the request factory
337
340
* @return a new builder instance
341
+ * @since 2.0.0
338
342
*/
339
- public RestTemplateBuilder requestFactory (ClientHttpRequestFactory requestFactory ) {
340
- Assert .notNull (requestFactory , "RequestFactory must not be null" );
343
+ public RestTemplateBuilder requestFactory (Supplier < ClientHttpRequestFactory > requestFactorySupplier ) {
344
+ Assert .notNull (requestFactorySupplier , "RequestFactory Supplier must not be null" );
341
345
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
342
- this .messageConverters , requestFactory , this .uriTemplateHandler ,
346
+ this .messageConverters , requestFactorySupplier , this .uriTemplateHandler ,
343
347
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
344
348
this .requestFactoryCustomizers , this .interceptors );
345
349
}
@@ -353,7 +357,7 @@ public RestTemplateBuilder requestFactory(ClientHttpRequestFactory requestFactor
353
357
public RestTemplateBuilder uriTemplateHandler (UriTemplateHandler uriTemplateHandler ) {
354
358
Assert .notNull (uriTemplateHandler , "UriTemplateHandler must not be null" );
355
359
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
356
- this .messageConverters , this .requestFactory , uriTemplateHandler ,
360
+ this .messageConverters , this .requestFactorySupplier , uriTemplateHandler ,
357
361
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
358
362
this .requestFactoryCustomizers , this .interceptors );
359
363
}
@@ -367,7 +371,7 @@ public RestTemplateBuilder uriTemplateHandler(UriTemplateHandler uriTemplateHand
367
371
public RestTemplateBuilder errorHandler (ResponseErrorHandler errorHandler ) {
368
372
Assert .notNull (errorHandler , "ErrorHandler must not be null" );
369
373
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
370
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
374
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
371
375
errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
372
376
this .requestFactoryCustomizers , this .interceptors );
373
377
}
@@ -381,7 +385,7 @@ public RestTemplateBuilder errorHandler(ResponseErrorHandler errorHandler) {
381
385
*/
382
386
public RestTemplateBuilder basicAuthorization (String username , String password ) {
383
387
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
384
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
388
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
385
389
this .errorHandler , new BasicAuthorizationInterceptor (username , password ),
386
390
this .restTemplateCustomizers , this .requestFactoryCustomizers ,
387
391
this .interceptors );
@@ -417,7 +421,7 @@ public RestTemplateBuilder customizers(
417
421
Assert .notNull (restTemplateCustomizers ,
418
422
"RestTemplateCustomizers must not be null" );
419
423
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
420
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
424
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
421
425
this .errorHandler , this .basicAuthorization ,
422
426
Collections .unmodifiableSet (new LinkedHashSet <RestTemplateCustomizer >(
423
427
restTemplateCustomizers )),
@@ -451,7 +455,7 @@ public RestTemplateBuilder additionalCustomizers(
451
455
Collection <? extends RestTemplateCustomizer > customizers ) {
452
456
Assert .notNull (customizers , "RestTemplateCustomizers must not be null" );
453
457
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
454
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
458
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
455
459
this .errorHandler , this .basicAuthorization ,
456
460
append (this .restTemplateCustomizers , customizers ),
457
461
this .requestFactoryCustomizers , this .interceptors );
@@ -465,7 +469,7 @@ public RestTemplateBuilder additionalCustomizers(
465
469
*/
466
470
public RestTemplateBuilder setConnectTimeout (int connectTimeout ) {
467
471
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
468
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
472
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
469
473
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
470
474
append (this .requestFactoryCustomizers ,
471
475
new ConnectTimeoutRequestFactoryCustomizer (connectTimeout )),
@@ -480,7 +484,7 @@ public RestTemplateBuilder setConnectTimeout(int connectTimeout) {
480
484
*/
481
485
public RestTemplateBuilder setReadTimeout (int readTimeout ) {
482
486
return new RestTemplateBuilder (this .detectRequestFactory , this .rootUri ,
483
- this .messageConverters , this .requestFactory , this .uriTemplateHandler ,
487
+ this .messageConverters , this .requestFactorySupplier , this .uriTemplateHandler ,
484
488
this .errorHandler , this .basicAuthorization , this .restTemplateCustomizers ,
485
489
append (this .requestFactoryCustomizers ,
486
490
new ReadTimeoutRequestFactoryCustomizer (readTimeout )),
@@ -547,8 +551,8 @@ public <T extends RestTemplate> T configure(T restTemplate) {
547
551
548
552
private void configureRequestFactory (RestTemplate restTemplate ) {
549
553
ClientHttpRequestFactory requestFactory = null ;
550
- if (this .requestFactory != null ) {
551
- requestFactory = this .requestFactory ;
554
+ if (this .requestFactorySupplier != null ) {
555
+ requestFactory = this .requestFactorySupplier . get () ;
552
556
}
553
557
else if (this .detectRequestFactory ) {
554
558
requestFactory = detectRequestFactory ();
0 commit comments