我目前正在用Spring WS開發SOAP客戶端。我跟着指南/教程,一切工作正常。除了一件事情,錯誤處理。Spring WS客戶端處理HTTP錯誤
我無法控制我發送消息的SOAP端點。所以我想在事情出錯的情況下做一些很好的異常處理。我在沒有指望的測試場景中遇到了一些HTTP錯誤。我不知道如何處理它們。
例如:
我發送SOAP消息到錯誤的URL。其中返回HTTP 405方法不允許。 (我發送POST到僅GET的URL,這是一個配置錯誤,但仍然是一個錯誤)。 在正文中實際上是來自SOAP端點的HTML錯誤頁面。當然,Spring不能處理這個消息並拋出一個異常。在堆棧跟蹤中,它顯然是405.但我想提取返回的錯誤代碼並以其他方式記錄(或者將它發回給發送SOAP消息請求的用戶)。
這些是發送SOAP消息後,我收到一些日誌消息(省略了其它記錄):
org.apache.http.wire : << "HTTP/1.1 405 Method Not Allowed[\r][\n]"
o.a.h.impl.conn.DefaultClientConnection : Receiving response: HTTP/1.1 405 Method Not Allowed
org.apache.http.headers : << HTTP/1.1 405 Method Not Allowed
是否有任何方式來捕捉和提取這些HTTP錯誤代碼? 如果需要更多信息,請詢問。我願意提供儘可能多的信息,但我不知道此時還要發佈什麼內容。
編輯:或者有什麼辦法用集成測試來模擬/測試這個嗎?我無法繼續發送消息到真正的SOAP端點。我從集成測試中得不到與真實測試相同的輸出(引導應用程序並將消息發送到真正的SOAP端點)。我已經將集成測試的日誌記錄級別設置爲與真實測試環境相同。
謝謝!
我試過這個實現,它似乎工作,但不是最佳。我嘗試在此方法中實現'log.error(「Error message:」+ webServiceConnection.getErrorMessage());''。它在我的日誌中記錄以下錯誤:'錯誤消息:[405]'。我將不得不從getErrorMessage()返回的字符串中去掉響應代碼。我實際上想要捕獲HTTP頭,它的HTTP響應代碼由'org.apache.http.headers'記錄,因爲它看起來更健壯。任何方式來做到這一點? – Clemenz
我編輯了我的答案,不知道您是否需要特定的狀態代碼,或僅僅通過檢測soap故障就足以滿足您的要求。 – artemisian
問題是,soap端點沒有返回SOAP錯誤。但實際的HTTP錯誤代碼與HTML錯誤頁面。這就是爲什麼我需要捕獲HTTP返回代碼,以檢查它是否是4xx或5xx。因爲我不打算解析HTML文件。我已經在試用ClientInterceptor。也許今天我會得到一個解決方案。感謝壽! – Clemenz