jueves, 28 de julio de 2011

Cambiar la URL de conexión y establecer timeout a un Web Service JAX-WS

En el artículo anterior explicaba cómo realizar un cliente de Web Service JAX-WS con maven. Las herramientas de JAX-WS generan la url de conexión (endpoint) a partir de la url definida en el WSDL. Sin embargo, desplegar nuestro cliente en un entorno de producción final requerirá que realicemos una programación un poco más afinada y parametrizada permitiendo cambiar la url de conexión (típicamente hacia el servicio de producción final) y establecer timeouts.

Establecer los timeouts es extremadamente recomendable para prevenir que nuestra aplicación se quede "pegada" al servicio y eventualmente pueda bloquearse toda nuestra aplicación al quedarnos sin threads libres, ya que los tiempos máximos de espera suelen estar indefinidos por defecto.

Para especificar todo esto no es necesario regenerar el cliente. La práctica habitual es parametrizar los valores de URL, timeout de conexión y timeout de lectura (request timeout) usando algún fichero de configuración o similar, recuperarlos y especificarlos en nuestro proxy cliente.

A continuación dejo un snippet de código típico de ejemplo:


import javax.xml.ws.BindingProvider;
import com.sun.xml.ws.client.BindingProviderProperties;
...
int requestTimeout = 5000;
int connectTimeout = 500;
String nuevaUrl = "http://www.cestel.es/jdialer/dataProvider";

Jdialer jdialer = new Jdialer();
BindingProvider bp = (BindingProvider) jdialer.getDataproviderPort();
bp.getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT,
		requestTimeout);
bp.getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT,
		connectTimeout);
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
				nuevaUrl);

Related Posts Plugin for WordPress, Blogger...
cookieassistant.com