簡體   English   中英

JAX-WS + SOAP:如何解析HTTP客戶端錯誤

[英]JAX-WS + SOAP: How to parse HTTP Client Error

我正在使用JAX-WS + SOAP與Web服務進行通信。 我可以處理SOAP消息(handleFault)但我無法理解如何捕獲HTTP錯誤,因為它們發生在HTTP Java客戶端層下...

com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 412: Precondition Failed
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:203)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:177)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
at com.sun.xml.ws.client.Stub.process(Stub.java:222)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)

我知道服務器應該包含一個包含錯誤情況解釋的實體 (實際上,我已經被告知它正在這樣做)。

我的問題是:如何到達那個“實體”?

看起來Web服務沒有按照規范實現。 根據W3C Note 2000 May 2000關於SOAP 1.1 (與SOAP 1.2相同):

如果在處理請求時出現SOAP錯誤,SOAP HTTP服務器必須發出HTTP 500“內部服務器錯誤”響應,並在響應中包含一條SOAP消息,其中包含指示SOAP處理錯誤的SOAP Fault元素(請參閱第4.4節)。

即使有一些“實體”,我認為你不應該在你的應用程序中處理它。 這肯定是一個黑客。 如果您只需要學習一次實體,只需使用Wireshark之​​類的嗅探工具即可。

如果您確實要忽略HTTP狀態代碼,可以將其作為JAX-WS實現切換到CXF。 在那里你可以禁用檢查HTTP代碼:

org.apache.cxf.endpoint.Client client = ClientProxy.getClient(hw);
client.getRequestContext().put("org.apache.cxf.http.no_io_exceptions", "true");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM