WebServices con Axis y JBoss

0
49837

WEBSERVICE CON JBOSS Y AXIS.

Todo el mundo sabe ya, o al menos entiende la potencia que supone el
uso de los webservices. Poder hacer uso del concepto de RPC y que
además sea independiente de la plataforma y del lenguage de
programación que se use, y que además, estos servicios
puedan ser invocados a través de HTTP o HTTPS hace que se
pueda decir de esta tecnología, que promete ser la próxima
generación en el desarrollo de software. En pocas palabras,
los webservices son llamadas a procedimientos remotos, usando como
protocolo de comunicaciones SOAP sobre HTTP/s y como formato de los
mensajes transmitidos XML, o mejor dicho SOAP-XML o envelopes.
Además, incluye la publicación de la definición
de los servicios en base al WSDL, de forma parecida a como los IDL
definen los servicios en CORBA.

Sin más, porque no se pretende en este tutorial explicar la
tecnología en profundidad, sino enseñarya crear un
servicio WEB usando AXIS y Jboss.

Lo primero es instalar AXIS. ¿ Pero que es AXIS ?. Axis no es
más que una aplicación WEB del proyecto XML de apache
que implementa el protocolo SOAP.

Por
lo tanto, el primer paso será instalar Axis (suponemos que ya
tenemos instalado el servidor Jboss, sino es así, en la
dirección http://labs.jboss.com/portal/download
podemos descargarlo. En el ejemplo estamos usando JBoss 4.0.2).

Nos
vamos a la página de apache Axis http://ws.apache.org/axis/
y seleccionamos la versión a descargar. Como vamos a trabajar
con la versión 1.3, tenéis aquí el enlace
directo a la descarga:

http://apache.gva.es/ws/axis/1_3/
y pulsamos sobre:

Guardamos el fichero en disco, y lo descomprimimos en alguna carpeta
del disco:

Nos fijamos en el directorio webapps. Dentro de este directorio,
existe una carpeta llamada axis. Vamos a cambiar el nombre de esta
carpeta y la vamos a llamar axis.war . Una vez que hayamos
hecho esto, vamos a copiar la carpeta directamente al directorio de
despliegue del jboss. Por defecto, el directorio será:

<RUTA_JBOSS>\server\default\deploy\webapps

Si no existe la carpeta webapps, la creamos.

Probablemente, si tenemos arrancado el servidor de aplicaciones, la
aplicación se estará desplegando en caliente en este
momento.

Podemos comprobar si este despliegue se ha hecho correctamente, en la
página:(Comprobad el puerto por si no coincide con el
vuestro.)

http://localhost:8080/axis/happyaxis.jsp


Illustration
1: Página de instalación correcta de AXIS

Si hemos llegado aquí, ya estamos preparados para hacer
nuestro primer webservice.

Lo primero que haremos será crear un EJB de sesión si
estado, que hará la lógica de negocio de nuestro
webservice, lo que se suele llamar endpoint (la capa
subyacente que realiza el servicio). Para el cliente, esto será
completamente transparente. Supongo que ya estarás deseando
saber que va a hacer nuestro webservice, pues vamos a implementar el
primer euroconversor euros2pesetas, pesetas2euros de la historia vía
SOAP.

Lo primero, definiremos el interfaz que debe cumplir el interfaz
remoto de nuestro EJB. Sencillo, el interfaz:

/**

* Interface para obligar al interface remoto de nuestro EJB

* @author Francisco Javier Martínez Páez *

*/

public interface IEuroConversor {

	public static final float PTAS_EURO = 166.386f;


	public String euros2pesetas(String euros) throws RemoteException;

	public String pesetas2euros(String pesetas) throws RemoteException;

}

El interfaz Remoto:

/**

* Interface Remota de nuestro EJB

* @author Francisco Javier Martínez Páez

*/


public interface IEuroConversorEJB extends EJBObject, IEuroConversor {

}

El interfaz Home:

/**

* Interface Home de nuestro EJB

* @author Francisco Javier Martínez Páez

*/


public interface IEuroConversorEJBHome extends EJBHome {

	public IEuroConversorEJB create() throws RemoteException, CreateException;

}

El bean:(sin entrar a discutir sobre la implementación
de la euroconversión, que sin duda se puede hacer mucho mejor)

/**

* Clase que implementa los métodos de los interface Home, Remoto y INegocioAcademia

* @author Francisco Javier Martínez Páez

*/


public class EuroConversorEJBBean implements SessionBean, IEuroConversor {

	private SessionContext ctx = null;


	public String euros2pesetas(String euros) throws RemoteException {

		float fEuros = 0f;

		try {

			fEuros = Float.parseFloat(euros);

			fEuros *= IEuroConversor.PTAS_EURO;

			fEuros=Math.round(fEuros);

		} catch (Exception e) {

			System.out.println(“error convirtiendo”);

			fEuros = 0f;

		}

		return “”+fEuros;

	}


	public String pesetas2euros(String pesetas) throws RemoteException {

		float fPesetas = 0f;

		try {

			fPesetas = Float.parseFloat(pesetas);

			fPesetas /= IEuroConversor.PTAS_EURO;

			fPesetas=Math.round(fPesetas);

		} catch (Exception e) {
	
			System.out.println(“error convirtiendo”);

			fPesetas = 0f;

		}

		return “”+fPesetas;

	}


	public void ejbCreate() throws CreateException{System.out.println(“Me están creando…”);}

	public void ejbActivate() throws EJBException, RemoteException { System.out.println(“Me Activan…”);}

	public void ejbPassivate() throws EJBException, RemoteException {System.out.println(“Me Pasivan…”); }

	public void ejbRemove() throws EJBException, RemoteException { System.out.println(“Me están borrando…”); }


	public void setSessionContext(SessionContext ctx) throws EJBException,RemoteException {this.ctx = ctx;}


}

El descriptor del EJB:

<ejb-jar>

<enterprise-beans>

<!– Session Beans –>

<session>

<ejb-name>EuroEJB</ejb-name>

<description>EJB de eurocalculadora</description>

<display-name>EuroEJB</display-name>

<home>com.cursos.inet.ejbEuro.IEuroConversorEJBHome</home>

<remote>com.cursos.inet.ejbEuro.IEuroConversorEJB</remote>

<ejb-class>com.cursos.inet.ejbEuro.EuroConversorEJBBean</ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</session>

</enterprise-beans>

</ejb-jar>

El descriptor del ejb para jboss:(debemos fijarnos en el nombre JNDI
para recordarlo)

<jboss>

<enterprise-beans>

<session>

<ejb-name>EuroEJB</ejb-name>

<jndi-name>ejb/EuroEJB</jndi-name>

</session>

</enterprise-beans>

</jboss>

Creamos el jar para despliegue del ejb (ejbEuro.jar) con esta
estructura:

  • META-INF/

    • ejb-jar.xml

    • jboss.xml

  • com/…/IEuroConversorEJBHome.class

  • com/…/IEuroConversorEJB.class

  • com/…/IEuroConversor.class

  • com/…/EuroConversorEJBBean.class

Y lo desplegamos (lo
copiamos en <RUTA_JBOSS>\server\default\deploy\ )

Ya tenemos instalado
Axis y creado y desplegado nuestro EJB de endpoint.

¿ Y ahora ?.
Pues ahora vamos a desplegar el webservice haciendo uso de la magia
de Axis.

Para ello, y para
evitar conocer la sintaxis de los ficheros WSDL, usaremos un fichero
intermedio (wsdd webservice deployment descriptor) que nos va a hacer
transparente este tema:

<deployment xmlns=”http://xml.apache.org/axis/wsdd/”

xmlns:java=”http://xml.apache.org/axis/wsdd/providers/java”>

<service name=”EuroCalculadora” provider=”java:EJB”>

<parameter name=”beanJndiName” value=”ejb/EuroEJB“/>

<parameter name=”homeInterfaceName” value=”com.cursos.inet.ejbEuro.IEuroConversorEJBHome“/>

<parameter name=”remoteInterfaceName” value=”com.cursos.inet.ejbEuro.IEuroConversorEJB“/>

<parameter name=”allowedMethods” value=”*“/>

<parameter name=”jndiURL” value=”jnp://localhost:1099“/>

<parameter name=”jndiContextClass” value=”org.jnp.interfaces.NamingContextFactory“/>

</service>

</deployment>

Lo vamos a llamar deploy-euro.wsdd. Los parámetros se
comentan por si solos (fijaros en el nombre JNDI del EJB, ha de ser
el mismo que pusimos en jboss.xml)

Antes de usar la magia de axis, debemos configurar el CLASSPATH del
sistema para que java pueda encontrar las librerías de axis.
Una vez hecho esto, nos vamos al directorio donde está el
fichero deploy-euro.wsdd y lanzamos la siguiente aplicación:

java org.apache.axis.client.AdminClient deploy-euro.wsdd:


En este momento, ya deberíamos haber desplegado el webservice.

Lo comprobamos en: http://localhost:8080/axis/servlet/AxisServlet

Que nos muestra la lista de servicios desplegados:


Illustration
8: Página de los servicios registrados o desplegados

Nos fijamos en el que acabamos de desplegar: EuroCalculadora, que
tienes dos métodos a los que se puede invocar.

Fijémonos en el wsdl generado:
http://localhost:8080/axis/services/EuroCalculadora?wsdl

Podemos ver ahí, la descripción del webservice, métodos
y parámetros…

Probemos nuestro webservice directamente:

Convertiremos 12 euros a pesetas:

http://localhost:8080/axis/services/EuroCalculadora?method=euros2pesetas&in0=12

El resultado: (1997.0 pesetas …sin entrar a valorar el resultado
que podría ser más ajustado)


Illustration
9: Resultado de la invocación del webservice

Vamos a crear por último un cliente web, que solicite la
conversión al webservice. Debemos asegurarnos, que la
aplicación cliente que quiera invocar al webservice tenga las
librerías de AXIS.

Vamos a hacer un formulario con este aspecto:


Illustration
10: Imágen del JSP de captura de los datos

Veremos el resultado de la conversión de 2000 pesetas a euros:


Illustration
11: Resultado de la invocación

El código del jsp que recoge los parámetros e invoca al
webservice podría ser:

<%@page import=”java.net.URL,org.apache.axis.client.Call” %>

<%

String valor=request.getParameter(“valor”);

String tipo=request.getParameter(“tipo”);

URL url = new URL( “http://localhost:8080/axis/services/EuroCalculadora?wsdl“);

Call llamada= new Call(url);

Object [] parametros=new Object[1];

parametros[0]=valor;

String resultado=””;

String moneda=””;

if(“1″.equals(tipo)) {

resultado=(String) llamada.invoke(“euros2pesetas”,parametros);

resultado+=” pesetas”;

} else {

resultado=(String) llamada.invoke(“pesetas2euros”,parametros);

resultado+=” euros”;

}

%>

<h1>Segun mi WebService el valor buscado es: <%=resultado %></h1>

Ya está terminado. ¿ Sencillo verdad ?

No obstante, si necesitas ayuda, ya sabes como encontrarnos…

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad