我发现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使用了不推荐使用的类? 我应该如何设置自定义HttpClient实例? 看来,如果我设置自己的HttpClient,则无法通过HttpCompoemntsMessageSender对其进行配置。
谢谢
答案 0 :(得分:2)
不确定是否能够解决此问题,但这是以下问题的解决方案:
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();
希望这会有所帮助。