如何从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