2014-01-17 111 views
1

我正在使用Apache Camel CXF集成SOAP WebService。一切正常,但我注意到我的迴應是以HTTP 202而不是200回來。我有點擔心,因爲我知道很多人硬編碼像​​這樣的東西,這可能會破壞當前的服務。Apache Camel CXF響應202而不是200

我試過使用不同的攔截器來覆蓋從202到200的HTTP代碼,但沒有運氣。另外,202意味着Accepted這意味着請求正在處理中,但尚未完成。 200意味着OK這意味着該過程已完成。這是否意味着我在路線上做錯了事情?

解決此問題的正確方法是什麼?攔截器?設置駱駝標題?在路線上做些什麼來說它是完整的?

我使用Apache Camel 2.12.1和PAYLOAD模式。

編輯:這似乎與OneWay端點有關。有沒有什麼辦法可以停用它?

編輯2:經過數小時的嘗試,我想我有根本原因。我的WSDL沒有爲該特定操作定義任何輸出。我無法更改WSDL。也就是說,我相信當CXF使用WSDL創建端點時,它會自動假定它是OneWay端點,因爲沒有輸出。這意味着只要我們收到代碼爲202的請求,就會將響應發回。另外,我相信由於這個原因,不可能有OutInteceptor鏈。就個人而言,我相信可以發回202,但發送200的服務要求是否正確。是否有任何配置在CXF中更改以將其設置爲OneWay端點模式?

+0

單向操作會返回202 [儘管200也可以](http://docs.oracle.com/cd/B40099_02/books/EAI2/EAI2_WebServices6.html)。 [CXF維護一個在閱讀階段後直接發送202的攔截器](http://cxf.547215.n5.nabble.com/OneWay-interpretation-and-HTTP-binding-td5711719.html) - 你可能會攔截一個202響應[類似於這種方法](http://stackoverflow.com/questions/7575970/how-can-i-prevent-apache-cxf-from-sending-a-response-message)或[這裏的建議]( http://stackoverflow.com/questions/18976369/intercept-http-response-with-cxf) –

+0

感謝您的評論。所以我一直在嘗試不同的可能性,但沒有運氣。我要編輯我的帖子以提供更多信息。 – hveiga

回答

1

最後,我們發現一個攔截器做這件事:

public class SoapResponseInterceptor extends AbstractSoapInterceptor { 

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

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

希望它能幫助!