estoy teniendo problemas para manejar excepciones en mi servicio REST excepción de EJB:JAX-RS y gastos de
@Path("/blah")
@Stateless
public class BlahResource {
@EJB BlahService blahService;
@GET
public Response getBlah() {
try {
Blah blah = blahService.getBlah();
SomeUtil.doSomething();
return blah;
} catch (Exception e) {
throw new RestException(e.getMessage(), "unknown reason", Response.Status.INTERNAL_SERVER_ERROR);
}
}
}
RestException es una excepción asignada:
public class RestException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String reason;
private Status status;
public RestException(String message, String reason, Status status) {
super(message);
this.reason = reason;
this.status = status;
}
}
Y aquí es el asignador de excepción para RestException :
@Provider
public class RestExceptionMapper implements ExceptionMapper<RestException> {
public Response toResponse(RestException e) {
return Response.status(e.getStatus())
.entity(getExceptionString(e.getMessage(), e.getReason()))
.type("application/json")
.build();
}
public String getExceptionString(String message, String reason) {
JSONObject json = new JSONObject();
try {
json.put("error", message);
json.put("reason", reason);
} catch (JSONException je) {}
return json.toString();
}
}
Ahora, es importante para mí proporcionar un código de respuesta Y un texto de respuesta al final u ser. Sin embargo, cuando se lanza una RestException, esto provoca una EJBException (con el mensaje "EJB arrojó una excepción inesperada (no declarada) ...") para ser lanzada también, y el servlet solo devuelve el código de respuesta al cliente (y no el texto de respuesta que establecí en RestException).
Esto funciona sin problemas cuando mi recurso RESTful no es un EJB ... alguna idea? He estado trabajando en esto durante horas y me he quedado sin ideas.
Gracias!
Tengo un uso similar, mi EJB arroja WebApplicationException y funciona. – lili