ExceptionMapper для экземпляров WebApplicationException, созданных сущностью?

В нашей (наследственной) кодовой базе мы бросаем WebApplicationExceptions по-разному. В попытке сделать некоторый порядок в том, как мы обрабатываем исключения - я хотел создать ExceptionMapper для этих WAE (и других).

Я понял, однако, что Jersey ExceptionMapper отображает только WAE, которые не были выбраны сущностью.

Например:

throw new WebApplicationException(Response.status(500).build());

Это исключение попадает в ExceptionMapper.

throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, "bla")).build());

Это исключение НЕ попадает в ExceptionMapper.

Оба выбрасываются из одной и той же точки в коде.

Это мой 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);
...
}

Возможно ли создать ExceptionMapper, который будет захватывать WebApplicationExceptions, даже если их ответ уже построен с сущностью?

Мы используем Джерси 1.17.

Спасибо.

Ответ 1

пожалуйста, рассмотрите код в GIST:

https://gist.github.com/jeorfevre/9fb2c447a01bcc724998

  • Зарегистрируйте Mapper, который из MagicException содержит Response
  • Определить исключение, которое содержит ответ
  • Выбросить это исключение