如何從SOAPConnection.call()
的結果中獲取HTTP狀態?從SOAP響應獲取HTTP狀態碼
回答
從W3C note on SOAP (Section 6.2)
SOAP HTTP兩者遵循HTTP狀態代碼,用於 連通在HTTP狀態信息的語義。例如,2xx狀態 代碼表示客戶端的請求包括SOAP部件 被成功接收,理解和接受等
在SOAP錯誤的情況下在處理請求時,SOAP HTTP 服務器必須發出HTTP 500「內部服務器錯誤」響應和 在包含指示SOAP處理錯誤的SOAP Fault元素 (請參閱第4.4節)的響應中包含SOAP消息。
而且從documentation on SOAPFault in the API
的元素在含有錯誤和/或狀態信息 的 SOAPBody對象。此信息可能與SOAPMessage 對象中的錯誤有關,或者與此消息本身中與內容無關的問題有關。
所以,一個可能的答案可能是
SoapMessage soapMessage = null;
soapMessage = MySOAPConnection.call(...);
soapMessage.getSOAPPart().getEnvelope().getBody().getFault().getFaultCode();
一些參考這幫助我建立這個答案是:
是的。但是什麼'soapMessage.getSOAPPart()。getEnvelope()。getBody()。getFault()。getFaultCode()'是給出SOAP響應中的錯誤代碼。雖然HTTP標頭不在SOAP響應本身內部。所以使用這種方法不能提取HTTP狀態碼是不是? – asthiwanka
您可以GE通過MessageContext接口訪問HTTP頭。
http://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/MessageContext.html
最直接的方式是可能實現一種SOAPHandler這將給你訪問的MessageContext:
http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/handlers.html#wp222394
然而,SOAP應用程序通常不應該建立互動在HTTP狀態碼上,因爲那些是傳輸特定的。
簡單的答案是你不能。挖掘到HttpSOAPConnection代碼,HttpURLConnection對象的本地實例用於執行與目標服務的實際通信。這確實得到了httpResponse代碼,但它或多或少地將其從調用者完全隱藏起來。您所得出的結論是,如果您沒有發生異常,但返回的SOAPMessage包含SOAPFault,則返回代碼爲HttpURLConnection.HTTP_INTERNAL_ERROR(即500)。沒有例外,也沒有SOAPFault意味着返回代碼是200到206,所有這些都是「SUCCESS」 - 不幸的是,HttpURLConnection對象中的HTTP頭的狀態條目顯式不會複製到返回的SOAPMessage中的MIMEHeaders中...
// Header field 0 is the status line so we skip it.
別的會拋出一個異常,在異常的消息字段開括號後的代碼將啓動,可能是三位數,這是很難做到準確,因爲有人忘記關閉支架或任何其他分離器該消息之前...
throw new SOAPExceptionImpl(
"Bad response: ("
+ responseCode
+ httpConnection.getResponseMessage());
例如:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (502internal error - server connection terminated
這太可怕了一個異常依靠文字信息的格式,b ut響應代碼不會暴露在其他地方。
我的確有類似的要求陳述爲這個問題,業務分析師想記錄每個入站和出站肥皂調用相關的每個http響應代碼。我的答案適用於Apache CXF 2.7.5。
在javax.xml.ws.handler.soap.SoapHandler接口的實現中,您可以通過下面的代碼片段通過MessageContext接口訪問http狀態碼。
int status = ((javax.servlet.http.HttpServletResponse)messageContext.get("HTTP.RESPONSE")).getStatus();
- 1. 獲取HTTP狀態代碼
- 2. C++:從URL獲取HTTP狀態代碼
- 3. 獲取響應狀態代碼爲261
- 4. KSOAP2:獲取Web服務響應的http狀態碼
- 5. 從響應狀態獲取行號
- 6. 從POST獲取響應與302狀態
- 7. 從網址獲取http響應代碼
- 8. IE中的HTTP響應狀態代碼
- 9. 從<img>標籤獲取HTTP狀態碼或響應標頭?
- 10. 如何在soap客戶端中獲取Http響應代碼?
- 11. 從HTTP響應獲取Cookie
- 12. 從響應頭獲取狀態信息狀態下的代碼字段
- 13. 請求URL不允許從響應獲取狀態代碼
- 14. Windows Phone - 如何獲取HTTP狀態碼?
- 15. 獲取有關HTTP狀態代碼
- 16. 獲取HTTP狀態代碼描述
- 17. 在jquery中獲取http狀態代碼
- 18. 通過MeteorJS獲取HTTP狀態代碼
- 19. 從對象獲取SOAP響應
- 20. 從java soap handler獲取響應
- 21. 從xml soap響應中獲取值?
- 22. 當HTTP狀態不是200 OK時ASP.NET獲取Web響應
- 23. 從ActionFilterAttribute中檢索響應HTTP狀態代碼
- 24. Http獲取響應
- 25. 從java.io.IOException中提取HTTP狀態碼
- 26. AngularJS $ http獲取數據對象顯示狀態代碼而不是響應
- 27. iOS/Obj-c - 獲取HTTP狀態碼響應消息(原因短語)
- 28. HTTP狀態500而不是HTTP狀態的JAX-RS響應400
- 29. 如何從Iframe獲取HTTP狀態?
- 30. 如何從JavaScript獲取HTTP狀態
javax.xml.soap.SOAPConnection類具有名爲「call()」的此方法並返回一個SOAPMesage。 SOAPMessage可以有各種響應。例如,帶有HTTP 200,HTTP 500等的消息,我需要從SOAPMessage中找出HTTP代碼。 – asthiwanka
我想,你將會收到'SOAPException','http status'將與'200 OK'不同。 – Andremoniy