Проблема ExceptionMapper в RESTEasy - PullRequest
3 голосов
/ 30 июня 2010

В моем приложении JAXRS у меня 2 ExceptionMapper зарегистрировано как @Provider

public class MyExceptionMapper implements ExceptionMapper<Exception> {...}

public class MyCustomRuntimeExceptionMapper implements ExceptionMapper<MyCustomRuntimeException> {...}

Когда мое приложение выдает новый MyCustomRuntimeException, исключение перехватывается внутри MyExceptionMapper, хотя (согласно спецификации JAX-RS) оно должно быть перехвачено внутри MyCustomRuntimeExceptionMapper.

Вот что говорит JAXRS -

JAX-RS также поддерживает наследование исключений. Когда исключение JAX-RS сначала попытается найти ExceptionMapper для этого тип исключения. Если он не может найти его, он будет искать картограф это может обработать суперкласс исключения. Это будет продолжаться обрабатывать, пока не останется больше суперклассов для сопоставления.

У кого-нибудь есть подсказка, что здесь происходит?

Ответы [ 2 ]

1 голос
/ 07 апреля 2015

Я могу сделать это правильно, объявив провайдеров, как показано ниже, в моем web.xml:

<context-param>
        <param-name>resteasy.providers</param-name>
        <param-value>CustomExceptionHandler,DefaultExceptionHandler</param-value>
</context-param>
0 голосов
/ 14 июля 2010

У меня тоже была проблема с этим. Похоже, что он находит суперкласс исключения перед поиском подкласса. Это удерживает меня от наличия ExceptionMapper for Exception. Есть исключение для конкретного приложения, с которым мне приходится иметь дело, которое имеет подклассы; У меня не может быть отдельных картографов исключений для них. У меня есть одно сопоставление исключений для суперкласса, а затем куча операторов if (e instanceof SubClassA).

...