spring-ws不推荐使用DefaultHttpClient

时间:2018-10-02 20:32:14

标签: apache-httpclient-4.x spring-ws

我发现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对其进行配置。

谢谢

1 个答案:

答案 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();

希望这会有所帮助。