2012-10-04 21 views
9

Digamos que tengo 3 clases de excepción que quiero "atrapar":Jersey ExceptionMapper y la herencia

  • WebApplicationException Jersey
  • MiExcepción extiende RuntimeException
  • Excepción

Quiero que el WebApplicationException todavía debe mapearse automágicamente por Jersey, MyException debe ser mapeado por MyMapper y asegurarse de que MyFallbackMapper también asigne cualquier otra excepción.

Entonces, ¿por qué las excepciones (que quiero controlar) finalmente extienden Exception? ¿Hay alguna garantía de que MyMapper (y no MyFallbackMapper) se use para MyException?

Respuesta

13

JAX-RS 1.1 de especificaciones, capítulo 4.4:

Cuando una clase de recurso o método proveedor genera una excepción, el tiempo de ejecución JAX-RS intentará asignar la excepción de una respuesta HTTP adecuado - véase la sección 3.3.4 . Una aplicación puede suministrar proveedores de mapas de excepción para personalizar esta asignación.

Los proveedores de asignación de excepciones asignan una excepción comprobada o en tiempo de ejecución a una instancia de respuesta. Un proveedor de mapas de excepción implementa la interfaz ExceptionMapper y está anotado con @Provider. Cuando un método de recursos arroja una excepción para la cual hay un proveedor de mapeo de excepción, el proveedor de correspondencia se usa para obtener una instancia de respuesta. La Respuesta resultante se procesa como si el método que arroja la excepción hubiera devuelto la Respuesta, consulte la sección 3.3.3.

Al elegir un proveedor de asignación de excepciones para mapear una excepción, una implementación DEBE usar el proveedor cuyo tipo genérico es la superclase más cercana de la excepción.

+0

Gracias. ¡No sabía que era parte de jax-rs! –

+0

Este estar en la especificación es bueno, pero Jersey no cumple. Lo he visto manejar (usando el ejemplo de OP) manejar una 'MyException' usando' MyFallbackMapper'. – Jorn

+0

en ese caso, presente un error en https://java.net/jira/browse/JERSEY/, comparta su caso de prueba y adjunte el enlace a su prueba. ¡Gracias! –