Servicios REST con Jersey

Servicios REST con Jersey.


0. Índice de contenidos.

1. Introducción.

En este tutorial vamos a explorar las posibilidades que nos ofrece Jersey para validar los mensajes XML entrantes contra el esquema que tengamos definido.
También trataremos la gestión de excepciones que nos ofrece desacopladas de los servicios.

Aquí está la guía de usuario de la versión 1.11.

Para iniciaros con Jersey y sus anotaciones teneis un tutorial muy bueno de Germán.
Jersey: la implemetación de RESTFull de Sun

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: MacBook Pro 15′ (2.8 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).

  • Sistema Operativo: Mac OS X Snow Leopard 10.6.3.

  • NVIDIA GeForce 9600M GT 512Mb.

  • Toshiba 500 Gb. 5400r.p.m.

3. Implementación del servicio.

Para este tutorial vamos a utilizar la versión 1.11 de Jersey.
Comenzamos añadiendo la dependencia en el pom.xml

No vamos a centrarnos en la propia funcionalidad a implementar en el servicio, sino simplemente en su diseño. En la clase RestService definimos el servicio REST que queremos publicar.

4. Configuración.

En el server.xml tenemos que añadir la configuración del servlet de Jersey.
También se configura el paquete donde se encuentran las clases anotadas.

5. Validación del cuerpo del mensaje

Creamos la clase TrackBodyReader que es la encargada de contruir el objeto de la petición, esto lo hace Jersey por si mismo pero implementando esta interfaz asumimos el control de la construcción del objeto, permitiéndonos validar contra el esquema el mensaje de la petición. De esta manera desacoplamos la validación de los mensajes de la propia lógica del servicio.
Podríamos realizar cualquier tipo de validación, en este caso simplemente comprobamos que el XML este bien formado y cumpla el esquema.

6. Gestión de excepciones

Jersey nos proporciona una interfaz muy sencilla que nos permite capturar las excepciones que le definamos y devolver un mensaje encapsulándolas de forma que podamos construir una respuesta con la propia traza o lo que creamos oportuno.
En este ejemplo se devuelven en texto plano, pero sería fáctible incluirlas en una respuesta XML ó JSON.
En este caso capturamos únicamente las excepciones de tipo “WebApplicationException” manteniendo aislado el propio servicio de la gestión de las mismas.

7. Conclusión.

Como hemos visto, la propia implementación del servicio está desacoplada de la validación de los mensajes entrantes y de la gestión de excepciones, esto nos permite tener clases con muy pocas líneas de código con una funcionalidad muy concreta y acotada.

Espero que os haya sido de utilidad.
Cualquier aclaración, duda o sugerencia podéis incluirla en la zona de comentarios.

Un saludo.
Alvaro Cuesta.