JAX-WS + SOAP:如何解析HTTP客户端错误

问题描述:

我正在使用JAX-WS + SOAP与Web服务进行通信。我可以处理SOAP消息(handleFault),但我不明白如何捕捉HTTP错误,因为它们发生的HTTP Java客户端层下...JAX-WS + SOAP:如何解析HTTP客户端错误

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 08 May 2000 on SOAP 1.1(同与SOAP 1.2):

在SOAP错误的情况下在处理请求时,SOAP HTTP服务器必须发出一个HTTP 500“内部服务器错误”响应,并且包括在响应SOAP消息包含一个表示SOAP处理错误的SOAP Fault元素(请参阅第4.4节)。

即使有一些“实体”我不认为你应该处理您的应用程序。这绝对是一个黑客。如果您只需要了解一次实体,只需使用Wireshark等嗅探工具即可。

如果您真的想忽略HTTP状态码,您可以切换到CXF作为JAX-WS实现。您可以禁用检查HTTP代码:

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

让我们来看看...... HTTP 500仍然是一个HTTP错误!我怎样才能到达返回的XML? java实现中是否存在限制?我被告知SecureBlackbox库有一个名为ServerStatusCode的属性,其中包含一个名为responseFromServer的post响应XML对象,可以解析该对象以获取错误情况。 – marcolopes

+0

@marcolopes服务器应将HTTP 500与SOAP Fault一起作为XML内容返回,如[here](http://tutorials.jenkov.com/soap/fault.html)所示。如果在WSDL中指定了这个错误,那么它将被转换为适当的Java异常。关于SecureBlackbox - 你的意思是[this device](ftp://ftp.blackbox.com/manuals/i/ICOMP_technical_reference.pdf)。它看起来像这个设备提供的服务不是SOAP之一。它看起来像Rest/XML。此外,我无法找到任何支持基于HTTP的SOAP的SecureBlackbox参考。 –

+0

SBB:https://www.eldos.com/sbb/desc-ssl.php – marcolopes