0

你好我有一个关于设置连接超时的问题。我使用 WebServiceTemplate,它有 1 个 messageSender (CommonsHttpMessageSender)。但是是否可以为每个 URI(端点)设置不同的连接超时?

真挚地...

public Message sendRequest(OutgoingRequest message, MessageHeaders headers,
                        EndpointInfoProvider endpointInfoProvider,
                        WebServiceMessageCallback requestCallback){
    Assert.notNull(endpointInfoProvider, "Destination provider is required!");
    final Credentials credentials = endpointInfoProvider.getCredentials();
    URI destinationUri = endpointInfoProvider.getDestination();
    for (WebServiceMessageSender messageSender : webServiceTemplate.getMessageSenders()) {
        if (messageSender instanceof CommonsHttpMessageSender) {
            HttpClient httpClient = ((CommonsHttpMessageSender) messageSender).getHttpClient();
            httpClient.getState().setCredentials(
                    new AuthScope(destinationUri.getHost(),
                            destinationUri.getPort(), AuthScope.ANY_REALM,
                            AuthScope.ANY_SCHEME), credentials
            );
            httpClient.getParams().setAuthenticationPreemptive(true);
            ((CommonsHttpMessageSender) messageSender)
                    .setConnectionTimeout(endpointInfoProvider
                            .getTimeOutDuration());
        }
    }
    webServiceTemplate.setDestinationProvider(endpointInfoProvider);
    //........
}
4

1 回答 1

0

Spring WS 不支持不同 URI 的不同超时,也不打算添加此类功能。鉴于您的问题涉及 WebServiceTemplate,您可以轻松配置具有不同超时的多个模板,并根据需要使用它们。

于 2014-09-03T15:55:44.443 回答