繁体   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