JBoss.orgCommunity Documentation
Interceptors are another facility from Resteasy 2 that now appear in JAX-RS 2.0 but in a rather different form. There were four kinds of interceptors in Resteasy 2:
PreProcessInterceptorPostProcessInterceptorClientExecutionInterceptor
Of these, reader/writer interceptors, which wrap around the reading or writing of entities, carry over
essentially unchanged, except for class and method names.
javax.ws.rs.ext.ReaderInterceptor and javax.ws.rs.ext.WriterInterceptor
replace the old MessageBodyReaderInterceptor and
MessageBodyWriterInterceptor.
The two kinds of server side interceptors are replaced by filters, which behave similarly. There are four kinds of filters:
ContainerRequestFilterContainerResponseFilterClientRequestFilterClientResponseFilter
Like the old PreProcessInterceptors, ContainerRequestFilters
can access requests. A
public interface PreProcessInterceptor
{
ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException;
}
can modify the HttpRequest and then return a response or null.
If it returns a response, then the execution process is interrupted and
that response is returned. Similarly, a new
public interface ContainerRequestFilter
{
public void filter(ContainerRequestContext requestContext) throws IOException;
}
can access and modify a JAX-RS Request by calling
ContainerRequestContext.getRequest(), and it can supply a response
by calling ContainerRequestContext.abortWith(Response).
An old
public interface PostProcessInterceptor
{
void postProcess(ServerResponse response);
}
can modify the response, as can a new
public interface ContainerResponseFilter
{
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException;
}
by calling, for example, ContainerResponseContext.setStatus() or
ContainerResponseContext.setEntity().
The situation is somewhat different with the old ClientExecutionInterceptor.
Unlike PreProcessInterceptor and PreProcessInterceptor,
this one really wraps the invocation process on the client side. That is, it can examine and/or modify
the request and return by calling ClientRequestContext.abortWith(Response), or
proceed with the invocation and examine and/or modify the response.
Two client side filters, ClientRequestFilter and ClientResponseFilter,
are required to replace the functionality of ClientExecutionInterceptor. The former
can access the request, and the latter can access both the request and response.