Apache Camel CXF响应202而不是200

时间:2014-01-17 22:25:15

标签: java web-services cxf apache-camel interceptor

我正在使用Apache Camel CXF来集成SOAP WebService。一切正常,但我注意到我的回复是以HTTP 202而不是200回复​​。我很关心,因为我知道很多人硬编码像if(httpCode == 200) {...}这样的东西,这可能会破坏当前的服务。

我尝试使用不同的拦截器来覆盖202到200的HTTP代码,但没有运气。此外,202表示Accepted,这意味着请求正在处理但尚未完成。 200表示OK,表示该过程已完成。这是否意味着我在路线上做错了什么?

解决这个问题的正确方法是什么?拦截器?设置Camel标头?在路线上做点什么来说它完整了?

我正在使用Apache Camel 2.12.1和PAYLOAD模式。

编辑:这似乎与OneWay端点有关。有没有办法停用它?

EDIT2:经过几个小时的尝试,我认为我有根本原因。我的WSDL没有为该特定操作定义任何输出。我不能改变WSDL。也就是说,我相信当CXF使用WSDL创建端点时,它会自动假定它是OneWay端点,因为没有输出。这意味着一旦我们得到代码202的请求就会发回响应。此外,我认为由于这个原因,没有可能的OutInteceptor链。我个人认为发回202是可以的,但回送200是一项服务要求。我是否在CXF中更改了配置,以便在OneWay端点模式下进行设置?

1 个答案:

答案 0 :(得分:1)

最后,我们发现了一个拦截器:

public class SoapResponseInterceptor extends AbstractSoapInterceptor {

    public SoapResponseInterceptor() {
        super(Phase.PRE_LOGICAL);
    }

    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        message.getExchange().setOneWay(false);
    }
}

希望它有所帮助!