Я использую org.springframework.ws.client.core.WebServiceTemplate
для совершения вызовов веб-службы. Как настроить таймаут для вызова.Как установить таймаут в Spring WebServiceTemplate
ответ
Если вы хотите, чтобы вид контроля, вы можете
Эта статья, вероятно, своего рода вы из : http://onebyteatatime.wordpress.com/2009/03/19/how-to-set-socket-timeout-using-spring-webservicetemplate/
так, как я это реализовать, я определяю мой WebServiceTemplate использовать CommonsHttpMessageSender:
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory" />
<property name="messageSender">
<bean
class="org.springframework.ws.transport.http.CommonsHttpMessageSender">
</bean>
</property>
</bean>
Затем в коде, я получаю MessageSender и установить тайм-аут на нем. Вы также можете сделать это в своем xml.
CommonsHttpMessageSender messageSender = (CommonsHttpMessageSender)webServiceTemplate.getMessageSenders()[0];
messageSender.getHttpClient().getParams().setSoTimeout(timeoutMillis);
Если вы используете Spring WebServices 2.1.0 версии, вы можете установить тайм-аут, используя HttpComponentsMessageSender.
CommonsHttpMessageSender устарели и не рекомендуются весной.
Способ, которым я его реализовал, я определяю свой 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>
Просто Убедитесь, что у вас есть в вашем файле пом, вы добавили следующую
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
<scope>compile</scope>
</dependency>
Для CommonsHttpMessageSender, мы можем установить тайм-аут следующим образом:
<bean id="httpParams" class="org.apache.commons.httpclient.params.HttpClientParams">
<!-- Timeout in milliseconds: in this case 1 minute -->
<property name="soTimeout" value="60000" />
</bean>
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<property name="params" ref="httpParams" />
</bean>
<!-- Define the message sender used by all web service templates -->
<bean id="webServiceMessageSender" class="org.springframework.ws.transport.http.CommonsHttpMessageSender">
<constructor-arg>
<ref bean="httpClient"/>
</constructor-arg>
</bean>
и реф в webServiceMessageSender, как показано ниже:
<bean id="genericWebServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender" ref="webServiceMessageSender"/>
</bean>
То же Sathish ответ, но программно (Spring 4.x):
@Component
public class MyWebServiceGatewaySupport extends WebServiceGatewaySupport
{
@Value("${my.ws.readtimeout}")
private String readTimeout;
@Value("${my.ws.connectiontimeout}")
private String connectionTimeout;
Object marshalSendAndReceive(String endpoint, Object requestPayload)
{
WebServiceTemplate wsTemplate = this.getWebServiceTemplate();
WebServiceMessageSender[] senders = wsTemplate.getMessageSenders();
for (WebServiceMessageSender sender: senders)
{
try
{
int readTimeoutMsec = Integer.parseInt(readTimeout);
int connTimeoutMsec = Integer.parseInt(connectionTimeout);
HttpComponentsMessageSender httpSender = (HttpComponentsMessageSender) sender;
httpSender.setReadTimeout(readTimeoutMsec);
httpSender.setConnectionTimeout(connTimeoutMsec);
}
catch (ClassCastException|NumberFormatException cex)
{
logger.warn("Cannot set WS timeout: " + cex.getMessage());
}
}
return wsTemplate.marshalSendAndReceive(endpoint, requestPayload);
}
}
Я использую в своем проекте Spring Boot и Spring WS инъекцию с использованием 'Integer' уже, например. '@Value (" $ {my.ws.readtimeout} ") private Integer readTimeout' – EliuX
С весны WebServices 2.2, вы можете также использовать Spring в ClientHttpRequestMessageSender:
@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));
}
(...)
}
(нет зависимости к HTTP-компонентам Apache)
Этот код работал для меня.
@Bean
public YourlassImpl YourClassImpl(Jaxb2Marshaller marshaller, HttpComponentsMessageSender httpComponentsMessageSender) {
YourClassImpl client = new YourClassImpl();
client.setDefaultUri(PiiProperties.SOAP_ACTION.getValue());
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
client.setMessageSender(httpComponentsMessageSender);
return client;
}
@Bean
public HttpComponentsMessageSender httpComponentsMessageSender() {
HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
sender.setReadTimeout(1000);
sender.setConnectionTimeout(1000);
return sender;
}
- 1. Spring Webservicetemplate Подключение сброса ошибки
- 2. Установка тайм-аута в WebServiceTemplate от Spring
- 3. Использование Spring WebServiceTemplate с прокси
- 4. Как объединить Spring webserviceTemplate с информацией @RequestWrapper?
- 5. Как установить таймаут весны DriverManagerDataSource
- 6. Как установить данные прокси-сервера на WebServiceTemplate
- 7. Отправка защищенного запроса с использованием Spring WebserviceTemplate
- 8. Spring WebServiceTemplate Interceptor для добавления заголовка безопасности
- 9. Использование сторонних веб-сервисов через Spring WebServiceTemplate
- 10. Весна webServiceTemplate свойство таймаута соединения
- 11. Преимущества WebServiceGatewaySupport vs WebServiceTemplate
- 12. Как установить таймаут на InputStreamReader?
- 13. Как установить таймаут весной MVC/tomcat
- 14. Spring-WS: как использовать WebserviceTemplate с предварительно сгенерированным SOAP-конвертом
- 15. Как отключить проверку сертификатов SSL с помощью Spring WebServiceTemplate?
- 16. Установить таймаут по запросу
- 17. Сохранить Spring-ws webservicetemplate запрос к DB в формате XML
- 18. установить таймаут Диалог в android?
- 19. Установить таймаут в функции зависания
- 20. Как установить таймаут в запросе Mongoose?
- 21. Как установить таймаут в методе vueJs
- 22. Как установить таймаут для FastAGI в Asterisk
- 23. Как установить таймаут в HTTP-запросе Tornado?
- 24. Spring-WS WebServiceTemplate: В чем разница между HttpUrlConnectionMessageSender и HttpComponentsMessageSender?
- 25. Как я должен тестировать модуль WebServiceTemplate (SpringWS)
- 26. Spring WebServiceTemplate неправильно использует Xerces для отмены XML-ответа
- 27. Как отключить таймаут сеанса HTTP в Spring Security?
- 28. Установить таймаут только для recv
- 29. SSLHandshakeException, говорящий на веб-службу https с использованием Spring WebServiceTemplate
- 30. Установить таймаут для функции PHP
Итак, для WebServiceTemplate нет даже тайм-аута по умолчанию? как долго может быть действительным звонок? –
@ SMK есть другой способ, см. Мое обновление –