Este documento describe los servicios web de Java. Explica que los servicios web permiten que las aplicaciones se integren mediante el intercambio de datos usando protocolos y estándares estandarizados. Luego resume los tres tipos principales de servicios web: XML-RPC, SOAP y REST. Finalmente, describe algunas herramientas de Java como wsimport y wsgen que ayudan a generar código para servicios web.
2. ¿Que un Web Service?
Es un servicio que brinda una aplicación para poder integrarse con otras,
para lograr esto utiliza un conjunto de protocolos y estándares que sirven
para intercambiar datos entre ellas.
Java Web Services
3. Historia
Los Web Services surgieron ante una necesidad de estandarizar la
comunicación entre distintas plataformas (PC, Mainframe, Mac, etc.) y
lenguajes de programación (PHP, C#, Java, etc.).
Anteriormente se realizaron intentos de crear distintos estándares.
- DCOM (Distributed Componet Object Model): Modelo de componentes distribuidos
de Microsoft, una infraestructura de objetos distribuidos que permite a una
aplicación invocar componentes instalados en otro servidor.
- CORBA - ORB : Modelo de comunicación entre diferentes nodos usando TCP/IP.
Aunque era una tecnología que prometía mucho, tuvo algunos problemas en las
implementaciones e incompatibilidades.
Java Web Services
4. Tipos de Web Services
Java Web Services
W3C dice que los Web Services proveen una estandarización para
intercambiar información entre diferentes aplicaciones, que pueden correr o
no en la misma plataforma y que pueden estar o no desarrolladas en el
mismo lenguaje.
Los tres tipos de Web Services mas populares son:
▪ XML- RPC
▪ SOAP (JAX-WS)
▪ REST (JAX-RS)
5. XML- RPC
Java Web Services
Es un protocolo de llamada a procedimiento remoto que usa XML para
codificar los datos y HTTP como protocolo de transmisión de mensajes.
Especificación: http://xmlrpc.scripting.com/spec.html
6. Tipos de datos XML-RPC
Java Web Services
Nombre Tags de ejemplo Descripción
boolean <boolean>1</boolean> Valor Logico (0 o 1)
integer
<i4>42</i4>
o
<int>42</int>
Numero entero
double <double>-12.53</double> Numero de punto flotante de doble precisión
string <string>Hola mundo</string>
Cadena de caracteres. Debe seguir la
codificación XML.
date/time <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601> Día y hora
array
<array>
<data>
<value><i4>1404</i4></value>
<value><string>Algo aquí</string></value>
<value><i4>1</i4></value>
</data>
</array>
Vector de valores, sin almacenar claves
struct
<struct>
<member>
<name>foo</name>
<value><i4>1</i4></value>
</member>
<member>
<name>bar</name>
<value><i4>2</i4></value>
</member>
</struct>
Vector de valores, almacenando claves
base64 <base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64> Datos binarios codificados en base 64
nil <nil/> Valor nulo; una extensión XML-RPC
7. SOAP (Simple Object Access Protocol)
Java Web Services
SOAP
- SOAP es un protocolo para el intercambio de mensajes.
- Los mensajes SOAP, son independientes del sistema operativo, y pueden
transportarse sobre distintos protocolos FTP, SMTP, HTTP.
- Está basado en XML, a diferencia de DCOM y CORBA que son binarios; esto
facilita la lectura por parte de los humanos, pero también los mensajes resultan
más largos y, por lo tanto, considerablemente más lentos de transferir.
10. Mensaje SOAP
Java Web Services
▪ Envelope (Envoltorio)
- Define el comienzo y el final del mensaje
▪ Header (Encabezado)
- Atributos para procesamiento del mensaje
(seguridad, encriptación, etc.), el Header es
opcional
▪ Body (Cuerpo)
- Contiene el dato XML a enviar
▪ Fault (Errores)
- Se encuentra dentro del Body y es opcional.
Contiene la información sobre errores de
procesamiento del mensaje.
13. WSDL (Web Services Description Language)
Java Web Services
El WSDL describe la interfaz pública a los servicios Web. Está basado en
XML y describe la forma de comunicación, es decir, los requisitos del
protocolo y los formatos de los mensajes necesarios para interactuar con los
servicios listados en su catálogo. Las operaciones y mensajes que soporta se
describen en abstracto y se ligan después al protocolo concreto de red y al
formato del mensaje.
15. Tipo de Implementaciones
Java Web Services
▪ Implementación Bottom-up:
- Se comienza por el código (por ejemplo, una clase Java)
- Code-First / Contract-Last
▪ Implementaciónes Top-down:
- Se comienza por el WSDL
- Code-Last / Contract-First
16. Bottom-Up
Java Web Services
Ventajas:
▪ Forma rápida de exponer funcionalidades usando WS.
▪ No requiere conocimiento de XMLSchema, WSDL.
Desventajas:
▪ El esquema es embebido en el WSDL.
▪ Los cambios en la interfaz son más difíciles de manejar.
▪ En el WSDL hay dependencias con la implementación (paquetes y
namespaces)
17. Top-Down
Java Web Services
Ventajas:
▪ Permite el desarrollo independiente y paralelo entre cliente y servicio.
▪ Cuando se crean nuevos tipos, éstos pueden ser reutilizados por otros
servicios.
▪ No se generan dependencias con la implementación
Desventajas:
▪ Requiere conocimiento de XMLSchema y WSDL
18. Herramientas
Java Web Services
El JDK incorpora múltiples herramientas para el trabajo relacionado con JAX-
WS y JAXB
- wsimport: Lee el WSDL y genera las clases Java para el Servidor y Cliente
- wsgen: Lee el SEI o la SBI y genera las clases Java necesarias para el Servidor,
ademas permite generar el WSDL.
- schemagen: Genera el schema luego de leer las clases Java.
- xjc: Lee un archivo XSD y genera las clases Java
19. Faults – Tipos de errores (Elemento faultcode)
Java Web Services
▪ VersionMismatch: El nombre namespace provisto es inválido.
▪ MustUnderstand: Uno de los elemento del header que tenia el atributo
mustUnderstand en 1 no fue entendido o no fue obedecido por el servidor.
▪ Client: El contenido del mensaje fue la causa del error. Posiblemente
porque se incluyo un mensaje mal formado o con información incompleta en
el mismo.
▪ Server: La causa del problema no tiene que ver con el contenido del
mensaje. Ejemplos de esto, es que el servidor no haya podido lograr una
conexión con un servidor de base de datos para procesar el mensaje.