CXF RequestContextFilter

ε祈祈猫儿з 提交于 2019-12-24 01:09:05

问题


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)

回答1:


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>



来源:https://stackoverflow.com/questions/37729135/cxf-requestcontextfilter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!