2011-03-17 19 views
5

He creado un Interceptor RestEASY para permitirme establecer valores de encabezado en la respuesta HTTP después de que mi llamada al servicio web se haya completado. Mi código es el siguiente ...Interceptor RestEASY No se ha llamado

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

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

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

Cuando hago una llamada a mi servicio, sin embargo, el interceptor está nunca llamó. Veo que la llamada al servicio web se completó con éxito, pero ninguno del código en mi interceptor se ejecuta alguna vez. ¿Hay algo más que esto que deba hacer para registrar mi interceptor? ¿Tiene que ser declarado en otro lugar? ¿Hay algún parámetro web.xml especial que deba incluirse?

Respuesta

8

Tiene que listar el interceptor en el contexto-parámetro resteasy.providers de su web.xml. Agregar anotaciones a la clase Interceptor no es suficiente.

<context-param> 
     <param-name>resteasy.providers</param-name> 
     <param-value>org.resteasy.test.ejb.exception.FooExceptionMapper</param-value> 
</context-param> 
1

En cuanto a Resteasy 2.x también podría tener que escanear automáticamente WEB-INF/lib frascos y/classes WEB-INF para ambas clases de recursos JAX-RS y @Provider (@Path, @GET , etc .. @POST) y registrarlos:

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

O puede tener Resteasy escanear para las clases @Provider y registrarlos:

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

En ambos casos, usted no tiene que enumerar los interceptores de forma explícita en web.xml.

De lo contrario, si ambos de contexto-params 'resteasy.scan' y no están habilitadas '' resteasy.scan.providers (y son desactivados por defecto) es posible que desee especificar una lista separada por comas de los nombres de las clases @Provider completos que desea registrar el interior del elemento '' resteasy.providers:

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

que se toma desde el doc: http://docs.jboss.org/resteasy/docs/2.3.3.Final/userguide/html_single/index.html#d0e72

Cuestiones relacionadas