PCo*_*der 10
SOAP HTTP遵循HTTP状态代码的语义,用于在HTTP中传递状态信息.例如,2xx状态代码表示已成功接收,理解和接受包括SOAP组件的客户端请求等.
如果在处理请求时出现SOAP错误,SOAP HTTP服务器必须发出HTTP 500"内部服务器错误"响应,并在响应中包含一条SOAP消息,其中包含指示SOAP处理错误的SOAP Fault元素(请参阅第4.4节).
SOAPBody对象中包含错误和/或状态信息的元素.此信息可能与SOAPMessage对象中的错误或与消息本身中的内容无关的问题有关.
所以,可能的答案是
SoapMessage soapMessage = null;
soapMessage = MySOAPConnection.call(...);
soapMessage.getSOAPPart().getEnvelope().getBody().getFault().getFaultCode();
Run Code Online (Sandbox Code Playgroud)
一些帮助我创建这个答案的参考文献是:
简单的答案是你不能。深入了解HttpSOAPConnection代码,使用 HttpURLConnection 对象的本地实例与目标服务进行实际通信。这确实获得了 httpResponse 代码,但它或多或少地完全对调用者隐藏了它。您得出的结论是,如果您没有收到异常但返回的 SOAPMessage 包含 SOAPFault,则返回代码为 HttpURLConnection.HTTP_INTERNAL_ERROR(即 500)。没有例外,没有 SOAPFault 意味着返回代码是 200 到 206,所有这些都是“成功” - 不幸的是,来自 HttpURLConnection 对象中的 HTTP 标头的状态条目没有明确地复制到返回的 SOAPMessage 中的 MIMEHeaders ...
// Header field 0 is the status line so we skip it.
Run Code Online (Sandbox Code Playgroud)
其他任何事情都会引发异常,并且代码将在异常消息字段中的左括号之后开始,并且可能是三位数,很难准确,因为有人忘记了右括号或消息之前的任何其他分隔符......
throw new SOAPExceptionImpl(
"Bad response: ("
+ responseCode
+ httpConnection.getResponseMessage());
Run Code Online (Sandbox Code Playgroud)
例如:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (502internal error - server connection terminated
Run Code Online (Sandbox Code Playgroud)
在异常中依赖文本消息的格式是可怕的,但响应代码不会在其他任何地方公开。
| 归档时间: |
|
| 查看次数: |
39223 次 |
| 最近记录: |