Перехватчик RestEASY не вызывается - PullRequest
5 голосов
/ 17 марта 2011

Я создал перехватчик RestEASY, который позволяет мне устанавливать значения заголовка в ответе HTTP после завершения моего вызова веб-службы. Мой код выглядит так ...

@Provider
@ServerInterceptor
@Precedence("HEADER_DECORATORS")
public class MyHeaderInterceptor implements
        MessageBodyWriterInterceptor {

    @Override
    public void write(MessageBodyWriterContext context) throws IOException,
            WebApplicationException {

             ....do stuff here....
        }
}

Однако, когда я звоню в мою службу, перехватчик никогда не вызывается. Я вижу, что вызов веб-службы завершен успешно, но ни один код в моем перехватчике никогда не выполняется. Что-нибудь кроме этого мне нужно сделать, чтобы зарегистрировать мой перехватчик? Это должно быть объявлено где-нибудь еще? Существуют ли какие-либо специальные параметры web.xml, которые необходимо включить?

Ответы [ 2 ]

8 голосов
/ 22 марта 2011

Вы должны указать перехватчик в контекстном параметре resteasy.providers вашего web.xml.Добавление аннотации к классу Interceptor недостаточно.

<context-param>
      <param-name>resteasy.providers</param-name>
      <param-value>org.resteasy.test.ejb.exception.FooExceptionMapper</param-value>
</context-param>
1 голос
/ 05 декабря 2016

Что касается Resteasy 2.x, у вас также может быть возможность автоматического сканирования WEB-INF / lib jars и WEB-INF / classes для классов ресурсов @Provider и JAX-RS (@Path, @GET, @POST и т. Д. ..) и зарегистрируйте их:

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

Или может иметь Resteasy для сканирования классов @Provider и зарегистрировать их:

<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>true</param-value>
</context-param>

В обоих случаях вам не нужно явно перечислять перехватчики в web.xml.

В противном случае, если оба контекстных параметра 'resteasy.scan' и 'resteasy.scan.providers' не включены (и они отключены по умолчанию), вы можете указать список полностью определенных имен классов @Provider, разделенных запятыми, которые вы хотите зарегистрироваться в элементе resteasy.providers:

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.test.Interceptor1,com.test.Interceptor2</param-value>
</context-param>

Это взято из документа: http://docs.jboss.org/resteasy/docs/2.3.3.Final/userguide/html_single/index.html#d0e72

...