如何在春季 Web 服务模板中设置超时

2022-09-01 00:23:33

我正在使用 org.springframework.ws.client.core.WebServiceTemplate 进行 Web Service 调用。如何配置呼叫的超时。


答案 1

如果您使用的是Spring Webservices 2.1.0版本,则可以使用HttpComponentsMessageSender设置超时。

CommonsHttpMessageSender已被弃用,不再被Spring推荐。

我实现它的方式是,我定义我的WebServiceTemplate来使用HttpComponentsMessageSender。

值以毫秒为单位

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <property name="defaultUri" value="${endpoint.url}" />
    <property name="marshaller" ref="marshaller" />
    <property name="unmarshaller" ref="unmarshaller" />
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
            <property name="connectionTimeout" value="1200000" />
            <property name="readTimeout" value="1200000" />
        </bean>
    </property>
</bean>

只需确保在pom文件中,您添加了以下内容

<dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
        <scope>compile</scope>
    </dependency>

答案 2

从Spring Webservices 2.2开始,您还可以使用Spring的CustomerHttpRequestMessageSender

@Service
public class CustomWebServiceImpl extends WebServiceGatewaySupport implements CustomWebService {
    private static final int CONNECTION_TIMEOUT = (10 * 1000);
    private static final int READ_TIMEOUT = (10 * 1000);

    public CustomWebServiceImpl() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(CONNECTION_TIMEOUT);
        requestFactory.setReadTimeout(READ_TIMEOUT);
        setMessageSender(new ClientHttpRequestMessageSender(requestFactory));
    }

    (...)
}

(无需依赖 Apache HTTP 组件)


推荐