spring-ws 已弃用 DefaultHttpClient
spring-ws deprecated DefaultHttpClient
我发现 spring-ws-core 3.4.0.RELEASE 中的 HttpComponentsMessageSender 默认构造函数依赖于 httpclient 4.5.6,正在实例化一个已弃用的 DefaultHttpClient()。但是,当我尝试设置自定义 Httpclient 时:
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());
httpComponentsMessageSender.setReadTimeout(1000l);
我得到了:
Caused by: java.lang.UnsupportedOperationException: null
at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]
spring 默认使用已弃用的 class 是否正确?
我应该如何设置我的自定义 HttpClient 实例?
似乎如果我设置自己的 HttpClient,我将无法通过 HttpCompoemntsMessageSender 配置它。
谢谢,
不确定您是否能够解决此问题,但这是以下问题的解决方案:
Caused by: java.lang.UnsupportedOperationException: null
at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]
请注意,HttpComponentsMessageSender.setReadTimeout() 通过配置 HttpClient 参数来配置底层 HttpClient 的 readTimeout。
正如您在上面提供的那样,您可以使用 HttpClientBuilder 来执行此操作:
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());
解决方法是在HttpClientBuilder
上设置"DefaultRequestConfig"
HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.build();
如下所示,您可以通过定义 RequestConfig 在 HttpClient 级别设置这些配置选项。下面是一个例子:
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(60 * 1000)
.setConnectTimeout(60 * 1000)
.setSocketTimeout(60 * 1000)
.build();
希望这对您有所帮助。
我发现 spring-ws-core 3.4.0.RELEASE 中的 HttpComponentsMessageSender 默认构造函数依赖于 httpclient 4.5.6,正在实例化一个已弃用的 DefaultHttpClient()。但是,当我尝试设置自定义 Httpclient 时:
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());
httpComponentsMessageSender.setReadTimeout(1000l);
我得到了:
Caused by: java.lang.UnsupportedOperationException: null
at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]
spring 默认使用已弃用的 class 是否正确? 我应该如何设置我的自定义 HttpClient 实例? 似乎如果我设置自己的 HttpClient,我将无法通过 HttpCompoemntsMessageSender 配置它。
谢谢,
不确定您是否能够解决此问题,但这是以下问题的解决方案:
Caused by: java.lang.UnsupportedOperationException: null
at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]
请注意,HttpComponentsMessageSender.setReadTimeout() 通过配置 HttpClient 参数来配置底层 HttpClient 的 readTimeout。
正如您在上面提供的那样,您可以使用 HttpClientBuilder 来执行此操作:
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());
解决方法是在HttpClientBuilder
上设置"DefaultRequestConfig"HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.build();
如下所示,您可以通过定义 RequestConfig 在 HttpClient 级别设置这些配置选项。下面是一个例子:
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(60 * 1000)
.setConnectTimeout(60 * 1000)
.setSocketTimeout(60 * 1000)
.build();
希望这对您有所帮助。