Estoy usando org.springframework.ws.client.core.WebServiceTemplate
para realizar llamadas al servicio web. ¿Cómo puedo configurar el tiempo de espera para la llamada?Cómo configurar el tiempo de espera en Spring WebServiceTemplate
Respuesta
Si desea ese tipo de control, puede
- ya sea switch to CommonsHttpMessageSender, which uses the Jakarta Commons HttpClient
- o subclase
HttpUrlConnectionMessageSender
y en la llamadaprepareConnection(HttpURLConnection)
métodoUrlConnection.setReadTimeOut(int)
Este artículo probablemente tipo que fuera : http://onebyteatatime.wordpress.com/2009/03/19/how-to-set-socket-timeout-using-spring-webservicetemplate/
La forma en que lo tengo implementado, defino mi WebServiceTemplate utilizar 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>
Luego, en el código, tengo la MessageSender y establezca el tiempo de espera en él. También podría hacer esto en su xml.
CommonsHttpMessageSender messageSender = (CommonsHttpMessageSender)webServiceTemplate.getMessageSenders()[0];
messageSender.getHttpClient().getParams().setSoTimeout(timeoutMillis);
Si está utilizando la versión 2.1.0 de la primavera de servicios web, se puede establecer el tiempo de espera utilizando HttpComponentsMessageSender.
CommonsHttpMessageSender han quedado obsoletos y ya no son recomendados por Spring.
De la manera en que lo tengo implementado, defino mi WebServiceTemplate para usar HttpComponentsMessageSender.
Los valores son en milisegundos
<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>
Sólo asegúrese de que tiene en su archivo de POM, que ha añadido la siguiente
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
<scope>compile</scope>
</dependency>
Para el CommonsHttpMessageSender, podemos establecer el tiempo de espera de la siguiente manera:
<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>
y ref la webServiceMessageSender como se indica a continuación:
<bean id="genericWebServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender" ref="webServiceMessageSender"/>
</bean>
Igual respuesta Sathish, pero mediante programación (4.x primavera):
@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);
}
}
Estoy usando en mi proyecto de Spring Boot y Spring WS una inyección usando 'Integer' ya, p. '@Value (" $ {my.ws.readtimeout} ") private Integer readTimeout' – EliuX
desde la primavera de Servicios Web 2.2, también se puede utilizar ClientHttpRequestMessageSender de primavera:
@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));
}
(...)
}
(sin dependencia a los componentes HTTP de Apache necesarios)
El siguiente código funcionó para mí.
@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. Cómo configurar IHttpAsyncHandler un tiempo de espera?
- 2. Cómo configurar el tiempo de espera de keepalive en Android?
- 3. ¿Cómo configurar el tiempo de espera utilizando el dispositivo?
- 4. Búsqueda DNS de Node.js: cómo configurar el tiempo de espera?
- 5. openssl ssl_connect blocks forever - cómo configurar el tiempo de espera?
- 6. Cómo configurar el tiempo de espera para dataWithContentsOfURL: url
- 7. Cómo configurar el tiempo de espera para get_meta_tags() & get_headers()
- 8. ¿Cómo creo un objeto simulado para Spring WebServiceTemplate?
- 9. configurar el tiempo de espera para la entrada del usuario
- 10. cómo configurar un tiempo de espera para un método
- 11. configurando el tiempo de espera de la sesión en Spring MVC
- 12. Cómo configurar tiempo de espera de sesión, páginas de error mediante programación sin web.xml
- 13. Cómo configurar el tiempo de espera para la conexión de la base de datos en django
- 14. cómo configurar el tiempo de espera de conexión/solicitud para el servidor de embarcadero?
- 15. ¿Cómo configurar el tiempo de espera para urlfetch en Google App Engine?
- 16. Cómo configurar el tiempo de espera para un procedimiento almacenado en SQL Server
- 17. Cómo configurar el tiempo de espera HTTP Keep-Alive en un servidor nodejs
- 18. HttpWebRequest Tiempo de espera
- 19. Cómo configurar el tiempo de espera de adb - emulator desde la línea de comandos
- 20. ¿Cómo configurar el tiempo de espera de sesión más de 20 minutos?
- 21. cómo configurar el valor de tiempo de espera predeterminado de savon
- 22. Selenium WebDriver - Cómo configurar el tiempo de espera de carga de página usando C#
- 23. cómo configurar el tiempo de espera de la consulta desde la cadena de conexión SQL
- 24. ¿Por qué configurar el tiempo de espera de autenticación de formularios más tiempo que el tiempo de espera de la sesión?
- 25. ¿Cómo diferenciar cuándo espera (tiempo de espera prolongado) salir para notificar o tiempo de espera?
- 26. configurando tiempo de espera de sesión en Grails Spring Security Core Plugin
- 27. Establecer el tiempo de espera en simplexml_load_file
- 28. Configurar el tiempo de espera en la abreviatura de obtención de jQuery
- 29. Establecer el tiempo de espera del unicornio
- 30. ¿Cómo configurar multihilos en Spring Batch?
Entonces, ¿no hay ni siquiera un tiempo de espera predeterminado para WebServiceTemplate? ¿Cuánto tiempo puede ser válida la llamada? –
@MSK hay otra manera, vea mi actualización –