2015-04-02 5 views
9

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

Я понял, однако, что в 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.

Спасибо.

+0

2 года спустя, это все еще проблема с Джерси 2. 26 – ChrisO

ответ

0

пожалуйста, рассмотреть глядя на код в GIST:

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

  1. зарегистрировать Mapper, что из MagicException, содержащего ответ
  2. Определение исключений, которые содержат ответ
  3. Бросьте это исключение
+0

1. Это решение требует, чтобы я менял каждое место, в которое я бросаю WebApplicationExceptions, вместо этого бросаю MagicException. 2. Вы не справляетесь с основной проблемой - у MagicException все еще есть сущность, установленная в ней, и поэтому она все равно не будет поймана картографом. – Shakkalakka

+0

понял, я исправляю ответ сейчас. – jeorfevre

+0

Как это отличается от того, что я сделал? У меня уже есть блок отображения исключений, но он не заражает WAE, которые уже выбраны сущностью. – Shakkalakka