mam problemy obsługi wyjątków w moim relaksującego usługi:JAX-RS i obsługi wyjątków EJB
@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 jest odwzorowany wyjątek:
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;
}
}
A oto odwzorowujący wyjątek dla 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();
}
}
Teraz ważne jest, aby podać zarówno kod odpowiedzi, jak i tekst odpowiedzi do końca. ser. Jednak po wygenerowaniu wyjątku RestException powoduje to wyjątek EJBException (z komunikatem "EJB rzucił nieoczekiwany (niezaprzeczony) wyjątek ..."), a serwlet tylko zwraca kod odpowiedzi do klienta (i nie tekst odpowiedzi ustawiony w wyjątku RestException).
Działa to bezbłędnie, gdy mój RESTful zasób nie jest EJB ... żadnych pomysłów? Pracuję nad tym od wielu godzin i nie mam pomysłów.
Dzięki!
mam podobny USECASE, mój EJB rzuca WebApplicationException i to działa. – lili