Java Web Services: Una introducción (Parte I)


(Imagen: Edvard Munch - Madonna)


En fin, comenzaremos con una introducción violenta al mundo de los Web Services, dado que ya se acerca el vencimiento de mi voucher y tengo que rendir el SCDJWS antes que eso suceda. Comenzaremos esto con una revisión de los estándares necesarios para desarrollar Web Services con Java, así que van a ver muchas letritas en mayúsculas en este post.

Desarrollar Web Services (WS) implica desarrollar interfaces entre sistemas heterogéneos, las cúales están definidas mediante documentos WSDL, que están expresados en XML (y vamos a ver mucho XML de ahora en adelante). Este documento define los parámetros de entrada y de salida del WS en función a un esquema XML. Los parámetros de entrada llegan al WS usando una estructura de mensajes, que puede ser el estándar SOAP (aunque esto no es obligatorio).

Entonces, se puede utilizar mensajes SOAP (nuestro estándar de mensajes) para la transferencia de los mensajes de entrada y salida especificados en una definición de interfaz WSDL (nuestro lenguaje de definición de interfaces). Estos mensajes SOAP pueden viajar sobre distintos medios (HTTP, SMTP o JMS), pero una opción simple y natural sería utilizar HTTP.

Para poder certificarnos como SCDJWS debemos conocer los estándares Java Web Services , que nos proveen de herramientas para trabajar con WSDL y SOAP/HTTP mediante nuestro lenguaje de programación favorito (espero que su respùesta halla sido Java). Tenemos herramientas del lado del servidor que nos permiten invocar métodos Java mediante SOAP y publicar sus respectivas definiciones de interfaces WSDL. Por otro lado, tenemos herramientas del lado del cliente para leer documentos WSDL y enviar/recibir mensajes SOAP.

Comencemos viendo el despliegue del lado del servidor, y la invocación de un WS. Para esto nos ayudaremos con esta gráfica tomada de SOA Using Java Web Services:


  1. Un puerto es la vista del servidor de un Web Service, que puede estar empaquetado como un WAR o un EJB JAR. El JSR (Java Web Service Standard) utilizado para definir el proceso de despliegue y la estructura de paquetes es WSEE. Asimismo WS-Metadata (otro JSR) describe como las anotaciones del clases empaquetadas se ajustan al despliegue.
  2. El endpoint que se observa en el gráfico soporta peticiones HTTP GET para las que devolverá el WSDL que describe el WS. La estructura de este WSDL es definida por el mapeo WSDL/Java de JAX-WS. Este mapeo puede ser modificado mediante las anotaciones de JAX-WS, JAXB y WS-Metadata.
  3. La invocación del WS desplegado se inicia cuando se recibe una petición SOAP a través de un HTTP POST que llega al endpoint.
  4. El endpoint de un WS se implementa por lo general mediante un servlet que atiende request de un URL especificado al momento del despliegue
  5. En el paso 5 del dibujo la petición SOAP se ha convertido en un grupo de parámetros XML (instancias del esquema XML especificados como parámetros en el WSDL). El runtime JAX-WS es responsable de extraer estos parámetros de mensaje SOAP.
  6. Luego, los parámetros XML son "deserializados" en parámetros Java. Este proceso es manejado por el runtime JAXB, en funciónm de las anotaciones en las clases Java objetivo.
  7. Una vez que los parámetros han sido creados (los parámetros Java),se invoca el método Java correspondiente al WS. Esto es manejado por el runtime JAX-WS. Las clases que nos proveen el método invocado pueden ser EJB's o POJO's. Como se ve en el dibujo, aquí están metidos JAX-WS, JAXB y WS-Metadata.
  8. Después de la invocación, el proceso se ejecuta en orden inverso. El resultado del método, que es una instancia Java, es serializado en una instancia XML mediante JAXB. Para esto, se deben agregar anotaciones en la clase Java resultado.
  9. Luego, el runtime de JAX-WS toma las instancias XML devueltas y las envuelve en una respuesta SOAP.
  10. Finalmente, la respuesta SOAP es enviada al invocador del WS en una respuesta HTTP.


Creo que hasta aquí llegamos hoy. Mañana la continuamos.

Basado en el capítulo 2 de SOA Using Java Web Services de Mark D. Hansen

Publicar un comentario