Search code examples
cxf

CXF RequestContextFilter


http://cxf.apache.org/docs/30-migration-guide.html

CXF RequestHandler and ResponseHandler filters have been removed, please use JAX-RS 2.0 ContainerRequestFilter and ContainerResponseFilter and also WriterInterceptor and ReaderInterceptor when needed.

How to rewrite it? I cant find any examples taking org.apache.cxf.message.Message as a parameter and returning Response.

Also I should use the ContainerResponseFilter

public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {

instead of RequestHandler

Response handleRequest(Message m, ClassResourceInfo resourceClass)

Solution

  • Replace RequestHandler

    public class CustomRequestHandler implements RequestHandler {
        public Response handleRequest(Message m, ClassResourceInfo resourceClass) {
    

    with ContainerRequestFilter

    public class CustomRequestFilter implements ContainerRequestFilter {
        public void filter(ContainerRequestContext context) {
            Message m = JAXRSUtils.getCurrentMessage(); 
            OperationResourceInfo m = message.getExchange().get(OperationResourceInfo.class);
            ClassResourceInfo resourceClass = operation.getClassResourceInfo();
            // finally use context.abortWith(Response) if you need to block the request 
    

    Replace ResponseHandler

    public class CustomResponseHandler implements ResponseHandler {
        public Response handleResponse(Message m, OperationResourceInfo operation, Response response) {
    

    with ContainerResponseFilter

    public class CustomResponseFilter implements ContainerResponseFilter  {
        public void filter(ContainerRequestContext inContext, ContainerResponseContext outContext) throws IOException{
            Message m = JAXRSUtils.getCurrentMessage();
            OperationResourceInfo operation = m.getExchange().get(OperationResourceInfo.class);
            //outContext has the capabilites of javax.ws.rs.Response. For example outContext.setStatus(201);
    

    Spring

    <bean id="customRequestFilter" class="com.CustomRequestFilter" />
    <bean id="customResponseFilter" class="com.CustomResponseFilter" /> 
    
    <!-- Add filters to provider zone in JAX-RS server-->
    <bean id="myRestServer" class="org.apache.cxf.jaxrs.JAXRSServerFactoryBean" lazy-init="false" init-method="create">
        ...
        <property name="providers">
            <list>
                <ref bean="customRequestFilter" />
                <ref bean="customResponseFilter" /> 
            </list>
        </property>