2011-10-31 13 views
14

Estoy creando un servicio web de Jersey, y me he encontrado usando los dos tipos de excepción mencionados. El constructor WebServiceException le permite pasar un String como la causa donde WebApplicationException permite pasar un código de estado HTTP. Incluyendo las diferencias de los constructores, ¿cuál es el propósito de tener estos dos tipos de excepciones?Diferencia entre WebApplicationException y WebServiceException en el contexto de Jax-RS (Jersey)

Gracias.

Respuesta

20

Una WebApplicationException es una forma en la que puede detener la ejecución de un recurso REST y enviar información significativa a su cliente. Para las cosas que he estado haciendo, subclasé esta excepción para que tenga una implementación que produzca JSON como mensajes de error para el cliente. En el caso de una condición de error, digamos un archivo que falta yo podría hacer algo como esto:

}catch(FileNotFoundException ex){ 
    throw new MyException(ex.getMessage()); 

En el cliente esto, entonces produciría algo como:

{ errorCode: 56, errorMessage: 'could not find file "input.txt"' }; 

http://download.oracle.com/javaee/6/api/javax/ws/rs/WebApplicationException.html '

Una excepción WebServiceException es la excepción del tiempo de ejecución de la raíz para Jersey, es decir, lo que comúnmente resulta de la falla de sus recursos y da como resultado un HTTP 500.

http://download.oracle.com/javaee/5/api/javax/xml/ws/WebServiceException.html

Así que la respuesta corta es la primera excepción que puede arrojar y la otra es la que espera que nunca se arroje. : P

Un ejemplo:

public class MyException extends WebApplicationException { 

public MyException(JSONObject jsonObject) { 
    super(Response.status(Response.Status.OK) 
      .entity(jsonObject) 
      .type(MediaType.APPLICATION_JSON) 
      .build()); 
} 

Luego, desde cualquier parte del código que desea detener la ejecución y enviar la información de error al cliente hacer esto:

}catch(FileNotFoundException ex){ 
    throw new MyException(new JSONObject(){{ this.put("errorCode", 4); .... }}); 
+0

Así que si yo fuera a querer para hacer algo similar con WebApplicationException como devolver una respuesta json o xml, ¿cómo lo haría? – Blaskovicz

+0

@Blaskovicz publicó un ejemplo anterior para usted. ¿Responde esto completamente a tu pregunta? –

+0

sí, gracias :) – Blaskovicz

Cuestiones relacionadas