我正在使用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端点模式下进行设置?
答案 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);
}
}
希望它有所帮助!