Integracion Webservice Axid 2 y Tomcat mediante javabean ;
Integracion Webservice y Tomcat mediante javabean.
En la actualidad uno de los recursos mas utilizados para comunicar dos sistemas es el uo de Webservice,
debido a que el modelo de comunicacion es transparente tanto desde punto de vista del lenguaje , modelo
de programcion, esquems de seguridad , integridad de datos y facilidad de implementación.
El modelo de interacción es bien sencillo desde el punto de vista conceptual.
1. Un generdor de webservice , "publica" una aplicacion con los procedimientos y manera para accesarlos y ejecutarlo y/o adquirir los datos por la apliacion presentados. La apliacion puede ser hecha eventualmente en cualquier lenguajes que posteriormente pueda ser manipulada por un webservice
2. El motor de webservice, traduce la publicacion publicada por el proveedor del servicio , en un conjunto de etiquetas tipo XML, que describen la foma de operación de la apliacion "publicada" , este grupo de etiquetas se les denomina WSDL
3. Un cliente, "consume" la aplicacion generadora por el proveedor de webservice, manipulando o adquierendo los datos publicados por el mismo. La aplicacion cliente tambien puede ser hecha en cualquier lenguaje que permita el manejo de etiquetas XML , y permita leer un sevicio web , desde el cual se pueda descarcar el grupo de etiquetas WSDL y convertirlas en un programa ejecutable.
En caso que vamos a ver use Java 1.8 , tomcat 9.0 y axis2 (cliente). linux Centos 7
Nota; Todo el proceso requiere del super usuario o de sudo segun la conveniencia.
No es el objeto de este articulo enseñar a instalar el tomcat y el java, y el axis2 (cliente) es un archivo binario donde se encuentra el ejecutable que permite la generación automática del stub de aplicacion del webservice, no es mas que la convercion del sistema de etiquetas WSDL (xml) , publicadas por el proveedor en unas librerias para ser usadas en la aplicacion cliente y donde están todos los métodos publicados.
En resumen en este documento se pretende integrar un servidor (service) que ya existe y que te entrega el WDSL de su dominio para que se genere un cliente que se comunique con dicho servicio, desde la apliación que se pretende integrar.
Esta forma de gestacion del stub , es sencilla, y para eso se usa axis2 (cliente), si se desea trabajar en java, que es el caso que nos ocupa .
Axis2 viene en 2 modalidades , el axis2 web server service y axis2 client.
El enlace de axis2 esta en el siguiente link.
http://axis.apache.org/axis2/java/core/download.cgi
Descargar el binaria del modelo de creación de clientes, en este articulo utilizo el axis2-1.8.0.bin que viene un paquete zip.
Lo despanqueto con unzip y la carpeta por comodiad la coloca en /usr/local quedando la ruta completa /usr/local/axis2.
En axis2 hay 2 carpetas de interés a saber : bin y lib
En bin : esta el ejecutable que permite la conversión del sistema de etiquetas WSDL a un procedimiento java , para ser invocado desde una clase o un bean, este ultimo es el que nos interesa en este proceso, el
comando completo esta en /usr/local/bin/wsdl2java.sh
En Lib: Están la librerías en formato .jar que contiene los métodos para la creación del stub del cliente
Para iniciar el proceso procedemos a crear en /usr/local/axis2 , una estructura que permita la creacion del stub, esto un proceso estándar y consistente en colocar dentro del axis2 la estructura que le permita al generador de stub encontrar la ruta de creación del mismo.
procedemos con:
mkdir /usr/local/miStub
mkdir /usr/local/miStub/cliente
alli ejecuto el siguiente comando:
/usr/local/axis2/bin/wsdl2java.sh -uri http://www.elservidor.com:8092/mistub?wsdl -o client
donde :
1. /usr/local/axis2/bin/wsdl2java.sh -uri es el comando que se invoca para generar el stub y que se debió instalar al descomprimir el archivo axis2.zip
2. Es la ruta totalmente cualificada de la uri donde esta colocado el sistema de etiquetas WSDL (xml) publicado por el web service (la entrega el proveedor del wbservice)
3. - o client : Indica al generador de stub la ruta de creación del mismo.
Al dar enter sobre el comando , entra en el proceso de gestacion del stub, el cual puede demorar de
5 a 10 minutos dependiendo de la maquina y la complejidad del servicio.
Si el sistema se inicio correctamente se crea una nueva estructura a partir del punto de ingreso del comando
anteiror asi:
/usr/local/axis2/miStub/client/client/com/elservidor/src/mistub (lo marcado en azul fue creado de forma automática por el comando a partir de la estructura previa).
en esta carpeta el sistema coloca las 2 clases que mas tarde usaremos para generar el bean del cliente.
dichas clases son:
ServidorstubCallbackHandler.java
ServidorstubStub.java
Estas dos las colocamos en la carpeta del tomcat que esta asignada por estructura del tomacat
en /usr/local/tomcat/webapps/miaplicacion/WEB-INF/classes
Nota: El path inicial /usr/local/tomcat , es el lugar donde este ubicado su version de tomcat, yo suelo instalarlo en /usr/local las carpetas WEB-INF/classes es donde tomcat busca los bean que despliega con su tag de ejecución, el nuevo bean debe entonces ser instalado alli.
creamos una nueva carpeta en WEB-INF/classes/mistub y alli copiamos:
ServidorstubCallbackHandler.java
ServidorstubStub.java
Tambien es buena idea copiar todos los archivos .jar de la carpeta /usr/local/axis2/lib para que el sistema resuelva todas las dependencias de forma sencilla al momento de compilar.
ahora creamos nuestro bean , e invocamos las classes del stub :
es un formato mas o menos homogeno al cual le podemos hacer los ajustes del caso dependiendo del servicio publicado:
// *********************************************************************
MiBean.java
// *********************************************************************
package mistub ;
/* Bean Carlos Arturo Castano
10/10/2014
*/
import java.io.* ;
import java.util.* ;
import mistub.ServidorstubCallbackHandler ;
import mistub.Servidorstub.ServidorStub ;
public class MiBean
{
private String respuestaMovimiento = new String() ;
public String getMovimiento()
{
return (respuestaMovimiento) ;
}
public void setMovimiento(String _PCajaId,
String _PIpCaja,
String _PProducto,
String _PNumero,
String _PValor,
String _PSerie,
String _PFactura,
String _PUsuario
)
{
/*
Definir en el CLASSPATH los siguientes jar para
poder compilar y ejectur el servicio, dichos
paquetes estan en el binario de axis2 que se
descarga del sitio de axis2
/* Bean Carlos Arturo Castano
10/10/2014
*/
import java.io.* ;
import java.util.* ;
import mistub.ServidorstubCallbackHandler ;
import mistub.Servidorstub.ServidorStub ;
public class MiBean
{
private String respuestaMovimiento = new String() ;
public String getMovimiento()
{
return (respuestaMovimiento) ;
}
public void setMovimiento(String _PCajaId,
String _PIpCaja,
String _PProducto,
String _PNumero,
String _PValor,
String _PSerie,
String _PFactura,
String _PUsuario
)
{
/*
Definir en el CLASSPATH los siguientes jar para
poder compilar y ejectur el servicio, dichos
paquetes estan en el binario de axis2 que se
descarga del sitio de axis2
try
{
ServidorStub.PagoServicioConValor pago = new ServidorStub.PagoServicioConValor();
pago.setPCajaId(_PCajaId) ; // Nombre del Servidor
pago.setPIpCaja(_PIpCaja) ; // IP desde donde hace la conexion
pago.setPProducto(_PProducto) ; // Ver tabla de Productos del Instructiov Transpagos
pago.setPNumero(_PNumero) ; // Celular del cliente
pago.setPValor(_PValor) ; // $
pago.setPSerie(_PSerie) ; // Multired (MR)
pago.setPFactura(_PFactura) ; // Consecutivo de factura (Ver generador de consecutivos) \
pago.setPUsuario(_PUsuario) ; // Codigo del vendedor (Nit,Rut,codigo interno o equivale\
ServidorStub stub = new ServidorStub() ;
ServidorStub.PagoServicioConValorResponse respuestaWS = stub.pagoServicioConValor(pago);
respuestaMovimiento = respuestaWS.getPagoServicioConValorResult();
}
catch (Exception e)
{
}
}
}
{
ServidorStub.PagoServicioConValor pago = new ServidorStub.PagoServicioConValor();
pago.setPCajaId(_PCajaId) ; // Nombre del Servidor
pago.setPIpCaja(_PIpCaja) ; // IP desde donde hace la conexion
pago.setPProducto(_PProducto) ; // Ver tabla de Productos del Instructiov Transpagos
pago.setPNumero(_PNumero) ; // Celular del cliente
pago.setPValor(_PValor) ; // $
pago.setPSerie(_PSerie) ; // Multired (MR)
pago.setPFactura(_PFactura) ; // Consecutivo de factura (Ver generador de consecutivos) \
pago.setPUsuario(_PUsuario) ; // Codigo del vendedor (Nit,Rut,codigo interno o equivale\
ServidorStub stub = new ServidorStub() ;
ServidorStub.PagoServicioConValorResponse respuestaWS = stub.pagoServicioConValor(pago);
respuestaMovimiento = respuestaWS.getPagoServicioConValorResult();
}
catch (Exception e)
{
}
}
}
//*********************************************************************
Es muy importante que los package quede bien definido y los include de las librerias del stub, para que no se presenten mas tarde errorees de classNotFound, por que el bean no encuenta las librerías correctas.
a continuacion dejo un pequeno script que compila y deja el stub en las posiciones corretas denominado compila.sh (debe darsele permiso de ejecucion del tipo chmod ugo+wrx compila.sh) y que lo corro desde el interior de la carpera donde grabe miBean.java
/usr/local/tomcat/webapps/miapliacion/WEB-INF/classes/mistub
//*********************************************************************
// compila.sh
//*********************************************************************
clear
rm -f *.class
rm -f *.class
cp -rf /usr/local/axis2/lib/*.jar /usr/local/tomcat/webapps/miaplicaion/WEB-INF/lib/
cp -rf /usr/local/axis2/lib/*.jar .
javac -classpath ../:\
axis2-adb-1.6.0.jar:\
axis2-kernel-1.6.0.jar:\
axiom-api-1.2.11.jar \
miBean.java
chmod ugo+wrx *.class
jar cvf ../../mistub.jar ../../classes/miStub/*.class
//*********************************************************************
Nota; utilizo aqui una estructura jar , que acomoda las clases donde se necesitan , sin tener que preocuparme por classpath , notar también que invoca algunas librerías axis2 que el sistema requiere al momento de compilar el stub y deja las librerias en ../miaplicacion/WEB-INF/lib para que el tomcat pueda encontrarlas en el momento de invocare el bean.
Y tambien se copian las librerias de /usr/local/axis2/lib en el /usr/local/tomcat/webapps/miaplicacion/WEB-INF/lib ( sin esto el bean muestra el error de classNotFound) .
la copia de las mismas clases en la carpeta WEB-INF/classes/miStub es necesaria para el momento de la compilacion, es muy importante tener clara esta separacion, pues tomcat necesita las classes en el classpath que en este caso por defecto se coloca donde esta el bean para compilarlo y otra instancia que es cuando el bean es ejecutado que lo toma de la carpeta WEB-INF/lib
Y tambien se copian las librerias de /usr/local/axis2/lib en el /usr/local/tomcat/webapps/miaplicacion/WEB-INF/lib ( sin esto el bean muestra el error de classNotFound) .
la copia de las mismas clases en la carpeta WEB-INF/classes/miStub es necesaria para el momento de la compilacion, es muy importante tener clara esta separacion, pues tomcat necesita las classes en el classpath que en este caso por defecto se coloca donde esta el bean para compilarlo y otra instancia que es cuando el bean es ejecutado que lo toma de la carpeta WEB-INF/lib
No olvidar iniciar el tomcat para que este tome el nueo bean creado:
medante el uso de los camandos
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/starup.sh
ahora invocamos el bean desde un procedimiento de prueba *.jsp.
//************************************************************
// miBean.jsp
//*************************************************************
<%@ page language="java"
import="java.sql.*"
import="java.io.*"
import="java.util.*"
%>
<jsp:useBean id="miBean" scope="session" class="mistub.MiStub" />
import="java.sql.*"
import="java.io.*"
import="java.util.*"
%>
<jsp:useBean id="miBean" scope="session" class="mistub.MiStub" />
String respuesta = new String() ;
String _PCajaId = "Multired" ; // Nombre del Servidor
String _PIpCaja ="198.xxx.xxx,xxxx" ; // IP desde donde hace la conexion
String _PProducto ="110453" ; // Ver tabla de Productos del Instructiov Transpagos
String _PNumero ="4259999" ; // Celular del cliente
String _PValor ="10" ; // $ a comprar
String _PSerie ="MR" ; // Multired (MR)
String _PFactura ="1345678989" ; // Consecutivo de factura (Ver generador de consecutivos) \
String _PUsuario ="3141599999" ; // Codigo del vendedor (Nit,Rut,codigo interno o equivale \
miBean.setMovimiento(_PCajaId,
_PIpCaja,
_PProducto,
_PNumero,
_PValor,
_PSerie,
_PFactura,
_PUsuario
) ;
respuesta = miBean.getMovimiento() ;
%>String _PCajaId = "Multired" ; // Nombre del Servidor
String _PIpCaja ="198.xxx.xxx,xxxx" ; // IP desde donde hace la conexion
String _PProducto ="110453" ; // Ver tabla de Productos del Instructiov Transpagos
String _PNumero ="4259999" ; // Celular del cliente
String _PValor ="10" ; // $ a comprar
String _PSerie ="MR" ; // Multired (MR)
String _PFactura ="1345678989" ; // Consecutivo de factura (Ver generador de consecutivos) \
String _PUsuario ="3141599999" ; // Codigo del vendedor (Nit,Rut,codigo interno o equivale \
miBean.setMovimiento(_PCajaId,
_PIpCaja,
_PProducto,
_PNumero,
_PValor,
_PSerie,
_PFactura,
_PUsuario
) ;
respuesta = miBean.getMovimiento() ;
<center>
<font color=green size=5 >
respuesta WS: <b> <%= respuesta %> </b>
</font>
</center>
Comentarios
Publicar un comentario