首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CXF 2.7升级到CXF 3.0

从CXF 2.7升级到CXF 3.0
EN

Stack Overflow用户
提问于 2015-03-20 09:26:39
回答 1查看 1.2K关注 0票数 1

我正在尝试将其中一个代码基升级到CXF3.0,其中一些类被废弃,并试图升级依赖项。

代码语言:javascript
运行
复制
@Override
public Response handleResponse(Message m, OperationResourceInfo ori,
        Response response) {
    if (response.getStatus() == Response.Status.OK.getStatusCode()){
        if (response.getHeaderString("my_header") == null){
            Message inMessage = m.getExchange().getInMessage();
            String headerKey = getMyHeaderKey(inMessage);
            if (headerKey != null){
                AbstractResponse entityResponse  = (AbstractResponse) response.getEntity();
                response = generateResponse(entityResponse, inMessage, false);
            }
        }
    }
    return response;
}

private Response generateResponse(AbstractResponse ar, Message msg, boolean isConflict){
    ResponseBuilder responseBldr;
    if (isConflict){
        responseBldr = Response.status(Status.CONFLICT);
    }
    else{
        responseBldr = Response.ok(ar);
    }
    responseBldr.header("header1", "true");
    HttpServletRequest request = (HttpServletRequest) msg.get(AbstractHTTPDestination.HTTP_REQUEST);
    String retryId = request.getHeader("header2");
    if (retryId != null){
        responseBldr.header("header2", retryId);
    }
    return responseBldr.build();
}

我尝试使用ContainerRequest/Response过滤器,但找不到如何设置响应

代码语言:javascript
运行
复制
@Override
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
    Message m = JAXRSUtils.getCurrentMessage();
    containerResponseContext.getStatus();

    if (containerResponseContext.getStatus() == Response.Status.OK.getStatusCode()){
        if (containerResponseContext.getHeaderString("my_header") == null){
            Message inMessage = m.getExchange().getInMessage();
            String headerKey = getMyHeaderKey(inMessage);
            if (headerKey != null){
                AbstractResponse entityResponse  = (AbstractResponse) containerResponseContext.getEntity();
                response = generateResponse(entityResponse, inMessage, false);   //how do I do this with CXF 3.0?
            }
        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-23 20:38:15

请参考JAX-RS2.0过滤器这里,它说新的过滤器,ContainerRequestFilter和ContainerResponseFilter已经被引入.下面是一个例子,简单地说,就是你想要实现的所有行动。

代码语言:javascript
运行
复制
public class KPFilter implements ContainerResponseFilter {

    private Logger LOG = LoggerFactory.getLogger(KPFilter.class);

    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {

        if(responseContext.getStatus()== Status.OK.getStatusCode()){
            final String myHeader = requestContext.getHeaderString("myHeader");
            if(myHeader !=null && myHeader.equals("kp-header")){
                responseContext.getHeaders().add("resHeader", myHeader+"-res");
            }else{
                responseContext.setEntity("An erro occured");
                responseContext.setStatus(500);
            }
        }else{
            LOG.info("Status is not OK, its {}", responseContext.getStatus());
        }

    }
}

和cxf配置文件。

代码语言:javascript
运行
复制
<jaxrs:providers>
            <bean class="com.xxxxx.xxxxx.KPFilter" />
</jaxrs:providers>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29163249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档