En esta oportunidad mostraré algo muy requerido y necesario cuando se consumen WebService, a lo que me refiero es a la aplicación de los famosos TIMEOUT control de cada WebService consumido por medio de lo "Proxy Client" generados.
En esta oportunidad mostraré el manejo de dicho TimeOut por medio del FrameWork AXIS 1.4, un FrameWork no tan power como JaxWS pero que buen y aun muy usado en el mercado mundial.
Aquí muestro el contenido completo de la clase JAVA: TestProxyAxis1 , en donde limplemento el Cliente que consume un supuesto WebService: http://localhost:7001/ObtenerTecnologiaWS/ObtenerTecnologiaService?wsdl, al cual se le envía un numero telefónico y este responde con el tipo de Tecnología (El WS no es parte de este ejemplo planteado). Se debe de suponer que previamente uno ya ha tenido que crear el "Proxy Client" (.jar), para poder consumir el Servicio Web.
Aquí muestro el contenido completo de la clase JAVA: TestProxyAxis1 , en donde limplemento el Cliente que consume un supuesto WebService: http://localhost:7001/ObtenerTecnologiaWS/ObtenerTecnologiaService?wsdl, al cual se le envía un numero telefónico y este responde con el tipo de Tecnología (El WS no es parte de este ejemplo planteado). Se debe de suponer que previamente uno ya ha tenido que crear el "Proxy Client" (.jar), para poder consumir el Servicio Web.
EJEMPLO:
import java.net.SocketTimeoutException;
import java.net.URL;
import javax.xml.rpc.ServiceException;
import org.apache.axis.AxisFault;
import externalCompany.com.pe.bean.ObtenerTecnologiaRequest;
import externalCompany.com.pe.bean.ObtenerTecnologiaResponse;
import externalCompany.com.pe.bean.TransaccionBean;
import externalCompany.com.pe.bean.ObtenerTecnologiaWS.ObtenerTecnologiaBindingStub;
import externalCompany.com.pe.bean.ObtenerTecnologiaWS.ObtenerTecnologiaInput;
import externalCompany.com.pe.bean.ObtenerTecnologiaWS.ObtenerTecnologiaOutput;
import externalCompany.com.pe.bean.ObtenerTecnologiaWS.ObtenerTecnologiaServiceLocator;
/**
* @author cguerra.
* @clase: TestProxyAxis1.java
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class TestProxyAxis1{
/**
* @param argumentos
*/
public static void main( String ... argumentos ){
String URL_ENDPOINT = "http://localhost:7001/ObtenerTecnologiaWS/ObtenerTecnologiaService?wsdl";
ObtenerTecnologiaServiceLocator objLocator = null;
ObtenerTecnologiaBindingStub objBinding = null;
ObtenerTecnologiaInput objInput = null;
ObtenerTecnologiaRequest objRequest = null;
ObtenerTecnologiaOutput objOutput = null;
ObtenerTecnologiaResponse objResponse = null;
try{
objLocator = new ObtenerTecnologiaServiceLocator();
objBinding = (ObtenerTecnologiaBindingStub)objLocator.getObtenerTecnologiaPort( new URL( URL_ENDPOINT ) );
//TIMEOUT:
setTimeOutWS( objBinding );
objInput = new ObtenerTecnologiaInput();
objRequest = new ObtenerTecnologiaRequest();
objOutput = new ObtenerTecnologiaOutput();
objResponse = new ObtenerTecnologiaResponse();
objInput.setParam_Request( objRequest );
//INPUT:
objRequest.setTelefono( "52148652" );
objInput.setParam_Request( objRequest );
//WEBSERVICE:
objOutput = objBinding.obtenerTecnologia( objInput );
objResponse = objOutput.getParam_Response();
//OUTPUT:
String tecnologia = objResponse.getTecnologia();
TransaccionBean objTransaccionBean = objResponse.getTransaccionBean();
String codigo = objTransaccionBean.getCodigo();
String mensaje = objTransaccionBean.getMensaje();
System.out.println( "- TECNOLOGIA: " + tecnologia );
System.out.println( "- CODIGO: " + codigo );
System.out.println( "- MENSAJE: " + mensaje );
}
catch( ServiceException e ){
System.out.println( "ERROR:[ServiceException] " + e );
}
catch( AxisFault e ){
System.out.println( "ERROR:[AxisFault] " + e );
}
catch( Exception e ){
System.out.println( "ERROR:[Exception] " + e );
}
}
/**
* setTimeOutWS
* @param objBinding
* @throws Exception
*/
public static void setTimeOutWS( ObtenerTecnologiaBindingStub objBinding ) throws Exception{
try{
javax.xml.rpc.Stub objStub_RPC = (javax.xml.rpc.Stub)objBinding;
org.apache.axis.client.Stub objStub_AXIS = (org.apache.axis.client.Stub)objBinding;
int timeOut = (5 * 1000); //5 segundos
//----- FORMA #1: -----//
objStub_RPC._setProperty( "axis.connection.timeout", timeOut );
//----- FORMA #2: -----//
objStub_AXIS.setTimeout( timeOut );
//----- FORMA #3: -----//
objBinding._setProperty( org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, timeOut );
}
catch( Exception e ){
throw new SocketTimeoutException();
}
}
}
El método: setTimeOutWS recibe solo el Binding y es reutilizado para desde cualquier lugar aplicar un TIMEOUT de 3 formas distintas (uno ya escoge cual de ellas usar).
Saludos.
No hay comentarios:
Publicar un comentario