W naszej (starszej) bazie kodów, rzucamy WebApplicationExceptions na różne sposoby. Starając się uporządkować sposób, w jaki obsługujemy wyjątki, chciałem stworzyć ExceptionMapper dla tych WAE (i innych).ExceptionMapper dla WebApplicationExceptions zgłaszane z encji?
Uświadomiłem sobie jednak, że Jersey ExceptionMapper Jersey mapuje tylko WAE, które nie zostały rzucone z jednostką.
Na przykład
throw new WebApplicationException(Response.status(500).build());
Wyjątek jest złapany przez ExceptionMapper.
throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, "bla")).build());
Ten wyjątek NIE jest przechwytywany przez ExceptionMapper.
Oba są wyrzucane z tego samego punktu kodu.
To mój ExceptionMapper:
@Provider
public class GeneralExceptionMapper implements ExceptionMapper<Throwable> {
private static final Logger logger = LoggerFactory.getLogger(GeneralExceptionMapper.class);
@Override
public Response toResponse(Throwable e) {
logger.error("Caught a WAE", e);
...
}
Czy to możliwe, aby stworzyć ExceptionMapper który złapie WebApplicationExceptions nawet jeśli ich reakcja jest już zbudowany z podmiotem?
Używamy Jersey 1.17.
Dzięki.
Dwa lata później problem ten nadal występuje w przypadku produktu Jersey 2. 26 – ChrisO