MII 733 -
Computación Móvil
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
[email protected]
Sección 5
Servicios Web con
Axis
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
[email protected]
Introducción I
Los Servicios Web son la piedra angular de
cualquier desarrollo de sistemas distribuidos
actual
Los ordenadores hablan unos a otros a través
de la web usando HTTP y otros protocolos.
Un servicio web no tiene interfaz gráfica
Provee una API de métodos que pueden ser
invocados en la web
Diseñados para proveer “servicios”
Introducción II
Futuro en el que los negocios exponen aplicaciones
a clientes como Servicios Web en los cuales se paga
por su uso
Los sistemas de diferentes empresas cooperan unos
con otros a través de la Web
Mientras que DCOM está basado en estándares
propietarios, los Servicios Web lo están en XML y
HTTP
Son independientes de la plataforma y del lenguaje como
CORBA, pero más aceptados
En .NET, IIS y la infraestructura ASP.NET compilan
las fuentes, construyen contratos WSDL y manejan
las peticiones y respuestas de los servicios web.
En Java AXIS realiza una tarea muy similar
SOA
Los servicios web han dado lugar a un nuevo
modo de diseñar sistemas distribuídos:
Arquitecturas SOA (Service Oriented Arquitecture)
SOA = colección de servicios
Más información en http://www.service-
architecture.com/
http://msdn.microsoft.com/Longhorn/understandin
g/pillars/Indigo/default.aspx?pull=/library/en-
us/dnbda/html/srorientwp.asp
Servicios Web
Son un estándar basado en protocolos abiertos como
HTTP y SOAP
SOAP es un vocabulario XML que representa RPCs
http://www.w3.org/TR/SOAP
No necesitas ni Windows ni .NET, ni UNIX ni Java para
escribir servicios web
Servicio web = aplicación que:
se ejecuta en un servidor web
expone métodos a clientes
escucha peticiones HTTP representando comandos que invocan
a métodos Web
ejecuta métodos web y devuelve resultados
SOAP
SOAP es un protocolo de comunicación basado en XML útil para la
comunicación entre aplicaciones
Actualmente en versión 1.2, aunque la más utilizada es la 1.1
http://www.w3.org/2000/xp/Group/
SOAP es reconocido como el backbone de una nueva generación de
aplicaciones multi-platforma y multi-lenguaje, denominado Servicios Web.
SOAP es un mecanismo para el intercambio de mensajes a través de
Internet independiente de los lenguajes de programación
Es un protocolo de transporte
Los clientes envían una petición SOAP mediante un HTTP POST
normalmente y reciben un código de respuesta (éxito o error) y una
respuesta SOAP
Un mensaje SOAP es un mensaje XML que consta de un conjunto de
cabeceras opcionales y de un cuerpo.
Petición SOAP
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/so
ap/envelope/">
<soap:Body>
<getProductDetails
xmlns="http://warehouse.example.com/ws">
<productId>827635</productId>
</getProductDetails>
</soap:Body>
</soap:Envelope>
Respuesta SOAP
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductDetailsResponse
xmlns="http://warehouse.example.com/ws">
<getProductDetailsResult>
<productName>Toptimate 3-Piece Set</productName>
<productId>827635</productId>
<description>3-Piece luggage set. Black
Polyester.</description>
<price>96.50</price>
<inStock>true</inStock>
</getProductDetailsResult>
</getProductDetailsResponse>
</soap:Body>
</soap:Envelope>
Apache AXIS
AXIS es un motor SOAP, una framework para construir tanto la
parte servidora como cliente de Servicios Web.
Además:
Incluye un servidor
Un servlet que se integra con motores de servlets como Tomcat
Soporte extensivo del estándar Web Service Description Language
(WSDL)
Una herramienta para generar clases Java a partir de WSDL
Un conjunto de aplicaciones de ejemplo
Una herramienta para la monitorización de los paquetes TCP/IP
Open source, disponible en:
http://ws.apache.org/axis/
WS-*
Apache Axis
Axis es disponible en el fichero axis.jar;
que implementa la API JAX-RPC API
declarada en los ficheros JAR jaxrpc.jar
y saaj.jar. Requiere varias bibliotecas
de ayuda, para logeo, procesamiento
WSDL e introspección.
Características AXIS
La arquitectura de AXIS está basada en cadenas
configurables de manejadores de mensajes que
implementan pequeños fragmentos de funcionalidad de
una manera flexible
Sus propiedades principales:
Rápido implementado con un procesador XML SAX
Flexible
Estable
Orientado a Compontes
Soporta WSDL 1.1
Apache EXtensible Interaction System (AXIS) motor
SOAP muy configurable
Proceso de Generación de
Programas con Axis
Instalación Axis
1. Bajarse la distribución de Apache Axis de
http://ws.apache.org/axis/
La versión actual es 1.2RC2
Bajarse tanto versión binaria (ya compilado) como fuente (contiene
ejemplos)
Instalar un contenedor de servlets como Tomcat 5
2.
3. Copiar el directorio axis-1_2RC2\webapps\axis contenido
4.
en la distribución de Axis en %TOMCAT_HOME\webapps
Instalar .jar terceros necesitados por Axis, copiándolos en
%TOMCAT_HOME%\common\lib:
Junit.jar (Junit Testing System -
http://www.junit.org/index.htm)
mail.jar (Java Mail -
http://java.sun.com/products/javamail/)
activation.jar (Java Beans Activation Framework -
http://java.sun.com/products/javabeans/glasgow/jaf.html)
Instalación Axis
5. Arrancar el servidor web
6. Validar la instalación:
http://127.0.0.1:8080/axis/
(hacer clic en Validate)
7. Validar un SOAP endpoint:
http://localhost:8080/axis/s
ervices/Version?method=getVe
rsion
Axis soporta HTTP GET
Creando Servicios Web .jws
Axis tiene un método muy sencillo de
crear servicios web básicos, mediante el
mecanismo de ficheros .jws
Cuando alguien solicita a través de una url un
fichero .jws, éste es compilado y ejecutado
Revisar ejemplo:
http://localhost:8080/axis/Echo
Headers.jws?method=list
Cómo Instalar un Nuevo
Servicio Web
Dos pasos:
1. Copiar el código del servicio web bajo el directorio
%TOMCAT_HOME%\webapps\axis WAR
En el directorio WEB-INF\classes de AXIS copiar las
clases de tu nuevo servicio web
2.
Si tus clases están en un .jar simplemente copiarlas a
WEB-INF\lib
Informar al motor de AXIS acerca del nuevo fichero
Se realiza haciendo un POST de un fichero de explotación
(wsdd) mediante el programa AdminClient
El Web Service Deployment Descriptor describe en XML cuál
es el servicio web y qué métodos exporta
Compilando Servicios Web
Para compilar servicios web necesitamos colocar en nuestro
CLASSPATH las dependencias de AXIS
set AXIS_HOME=c:\axis
set AXIS_LIB=%AXIS_HOME%\lib
set
AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons
-discovery.jar;%AXIS_LIB%\commons-
logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.ja
r;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-
apis.jar;%AXIS_LIB%\xercesImpl.jar
Luego podemos hacer:
javac –classpath %AXISCLASSPATH%
java -cp %AXISCLASSPATH% ...
Ejecución del AdminClient
Buscar en axis\samples\stock un ejemplo de un
fichero de explotación web de AXIS: deploy.wsdd.
Registrar el servicio web mediante el comando:
java -cp %AXISCLASSPATH%
org.apache.axis.client.AdminClient -
lhttp://localhost:8080/axis/services/AdminServi
ce deploy.wsdd
Para probar el servicio web acceder a:
java -cp .;%AXISCLASSPATH% samples.stock.GetQuote
-
lhttp://localhost:8080/axis/servlet/AxisServlet
-uuser1 -wpass1 XXX
Cómo Añadir AXIS a tu
Aplicación Web
Los pasos a seguir son:
1. Añadir axis.jar, wsdl.jar, saaj.jar,
jaxrpc.jar y otras bibliotecas dependientes a tu
fichero WAR
2. Copiar todas las declaraciones del servlet de Axis y
sus mapeos de axis/WEB-INF/web.xml y
añadirlos a tu propio web.xml
3. Construir y desplegar la aplicación web
4. Ejecutar el AdminClient de AXIS contra tu propia
aplicación web, en vez de contra AXIS, cambiando
la url con la que invocas a AXIS
Consumiendo un Servicio Web
Vamos a desarrollar una pequeña aplicación cliente que
consume el servicio web más sencillo que podemos
imaginar, implementado en Echo.jws, que copiaremos
a %TOMCAT_HOME%\webapps\AXIS\:
public class Echo {
public String echoString(String msg)
{
return msg;
}
}
Consumiendo un Servicio Web
A continuación, vamos a definir un cliente
que me permita consumir este servicio
web desde línea de comando
Desde un navegador podríamos invocar a
este servicio mediante la URL:
http://localhost:8080/axis/Echo.jws?method=ec
hoString&msg=hola
Consumiendo un Servicio Web
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
public class EchoClient
{
public static void main(String [] args) {
try {
String endpoint = "http://localhost:8080/axis/Echo.jws";
service = new Service();
Service service
Service
= new Service();
Service
Service
service
service
= new Service();
= new Service();
= (Call) service.createCall
= (Call)
Call call
Call
call
service.createCall();();();();
service.createCall
= (Call)
= (Call)
callcall
Call
Call
service.createCall
java.net.URL(endpoint) );
call.setTargetEndpointAddress
( new java.net.URL(endpoint
call.setTargetEndpointAddress( new
) );
java.net.URL(endpoint
( new
call.setTargetEndpointAddress
call.setTargetEndpointAddress
( new
java.net.URL(endpoint
) );) );
echoString") );
/", "echoString
call.setOperationName(new QName("http://soapinterop.org
call.setOperationName(new
QName("http://soapinterop.org/", "
") );
echoString
/", "
QName("http://soapinterop.org
call.setOperationName(new
call.setOperationName(new
/", "
QName("http://soapinterop.org
echoString
") );
") );
String ret = (String) call.invoke
call.invoke( new Object[] { "Hello!" } );
call.invoke
call.invoke
System.out.println("Sent 'Hello!', got '" + ret + "'");
} catch (Exception e) {
System.err.println(e.
Comentarios de: Seccion 5 - Servicios Web con AXIS (0)
No hay comentarios