53
53
* @author Oleg Kalnichevski
54
54
* @author Arjen Poutsma
55
55
* @author Stephane Nicoll
56
+ * @author Juergen Hoeller
56
57
* @since 3.1
57
58
*/
58
59
public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequestFactory , DisposableBean {
@@ -109,8 +110,7 @@ public HttpClient getHttpClient() {
109
110
*/
110
111
public void setConnectTimeout (int timeout ) {
111
112
Assert .isTrue (timeout >= 0 , "Timeout must be a non-negative value" );
112
- this .requestConfig = cloneRequestConfig ()
113
- .setConnectTimeout (timeout ).build ();
113
+ this .requestConfig = requestConfigBuilder ().setConnectTimeout (timeout ).build ();
114
114
setLegacyConnectionTimeout (getHttpClient (), timeout );
115
115
}
116
116
@@ -131,8 +131,7 @@ public void setConnectTimeout(int timeout) {
131
131
@ SuppressWarnings ("deprecation" )
132
132
private void setLegacyConnectionTimeout (HttpClient client , int timeout ) {
133
133
if (org .apache .http .impl .client .AbstractHttpClient .class .isInstance (client )) {
134
- client .getParams ().setIntParameter (
135
- org .apache .http .params .CoreConnectionPNames .CONNECTION_TIMEOUT , timeout );
134
+ client .getParams ().setIntParameter (org .apache .http .params .CoreConnectionPNames .CONNECTION_TIMEOUT , timeout );
136
135
}
137
136
}
138
137
@@ -146,8 +145,7 @@ private void setLegacyConnectionTimeout(HttpClient client, int timeout) {
146
145
* @see RequestConfig#getConnectionRequestTimeout()
147
146
*/
148
147
public void setConnectionRequestTimeout (int connectionRequestTimeout ) {
149
- this .requestConfig = cloneRequestConfig ()
150
- .setConnectionRequestTimeout (connectionRequestTimeout ).build ();
148
+ this .requestConfig = requestConfigBuilder ().setConnectionRequestTimeout (connectionRequestTimeout ).build ();
151
149
}
152
150
153
151
/**
@@ -160,8 +158,7 @@ public void setConnectionRequestTimeout(int connectionRequestTimeout) {
160
158
*/
161
159
public void setReadTimeout (int timeout ) {
162
160
Assert .isTrue (timeout >= 0 , "Timeout must be a non-negative value" );
163
- this .requestConfig = cloneRequestConfig ()
164
- .setSocketTimeout (timeout ).build ();
161
+ this .requestConfig = requestConfigBuilder ().setSocketTimeout (timeout ).build ();
165
162
setLegacySocketTimeout (getHttpClient (), timeout );
166
163
}
167
164
@@ -175,15 +172,10 @@ public void setReadTimeout(int timeout) {
175
172
@ SuppressWarnings ("deprecation" )
176
173
private void setLegacySocketTimeout (HttpClient client , int timeout ) {
177
174
if (org .apache .http .impl .client .AbstractHttpClient .class .isInstance (client )) {
178
- client .getParams ().setIntParameter (
179
- org .apache .http .params .CoreConnectionPNames .SO_TIMEOUT , timeout );
175
+ client .getParams ().setIntParameter (org .apache .http .params .CoreConnectionPNames .SO_TIMEOUT , timeout );
180
176
}
181
177
}
182
178
183
- private RequestConfig .Builder cloneRequestConfig () {
184
- return this .requestConfig != null ? RequestConfig .copy (this .requestConfig ) : RequestConfig .custom ();
185
- }
186
-
187
179
/**
188
180
* Indicates whether this request factory should buffer the request body internally.
189
181
* <p>Default is {@code true}. When sending large amounts of data via POST or PUT, it is
@@ -226,29 +218,48 @@ public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IO
226
218
}
227
219
}
228
220
221
+
222
+ /**
223
+ * Return a builder for modifying the factory-level {@link RequestConfig}.
224
+ * @since 4.2
225
+ */
226
+ private RequestConfig .Builder requestConfigBuilder () {
227
+ return (this .requestConfig != null ? RequestConfig .copy (this .requestConfig ) : RequestConfig .custom ());
228
+ }
229
+
229
230
/**
230
231
* Create a default {@link RequestConfig} to use with the given client.
231
232
* Can return {@code null} to indicate that no custom request config should
232
233
* be set and the defaults of the {@link HttpClient} should be used.
233
234
* <p>The default implementation tries to merge the defaults of the client
234
- * with the local customizations of this instance, if any.
235
- * @param client the client
236
- * @return the RequestConfig to use
235
+ * with the local customizations of this factory instance, if any.
236
+ * @param client the {@link HttpClient} (or {@code HttpAsyncClient}) to check
237
+ * @return the actual RequestConfig to use (may be {@code null})
237
238
* @since 4.2
239
+ * @see #mergeRequestConfig(RequestConfig)
238
240
*/
239
- protected RequestConfig createRequestConfig (HttpClient client ) {
241
+ protected RequestConfig createRequestConfig (Object client ) {
240
242
if (client instanceof Configurable ) {
241
243
RequestConfig clientRequestConfig = ((Configurable ) client ).getConfig ();
242
244
return mergeRequestConfig (clientRequestConfig );
243
245
}
244
246
return this .requestConfig ;
245
247
}
246
248
247
- protected RequestConfig mergeRequestConfig (RequestConfig defaultRequestConfig ) {
248
- if (this .requestConfig == null ) { // nothing to merge
249
- return defaultRequestConfig ;
249
+ /**
250
+ * Merge the given {@link HttpClient}-level {@link RequestConfig} with
251
+ * the factory-level {@link RequestConfig}, if necessary.
252
+ * @param clientConfig the config held by the current
253
+ * @return the merged request config
254
+ * (may be {@code null} if the given client config is {@code null})
255
+ * @since 4.2
256
+ */
257
+ protected RequestConfig mergeRequestConfig (RequestConfig clientConfig ) {
258
+ if (this .requestConfig == null ) { // nothing to merge
259
+ return clientConfig ;
250
260
}
251
- RequestConfig .Builder builder = RequestConfig .copy (defaultRequestConfig );
261
+
262
+ RequestConfig .Builder builder = RequestConfig .copy (clientConfig );
252
263
int connectTimeout = this .requestConfig .getConnectTimeout ();
253
264
if (connectTimeout >= 0 ) {
254
265
builder .setConnectTimeout (connectTimeout );
@@ -264,10 +275,6 @@ protected RequestConfig mergeRequestConfig(RequestConfig defaultRequestConfig) {
264
275
return builder .build ();
265
276
}
266
277
267
- protected final RequestConfig getInternalRequestConfig () {
268
- return this .requestConfig ;
269
- }
270
-
271
278
/**
272
279
* Create a Commons HttpMethodBase object for the given HTTP method and URI specification.
273
280
* @param httpMethod the HTTP method
0 commit comments