java - 如何在CXF中处理来自外部系统的SOAP故障?

标签 java web-services soap cxf

我正在使用 CXF 2.6.2 从外部系统访问 Web 服务。 stub 是从 WSDL 文件生成的。当网络服务正确响应时,这可以正常工作,但在故障情况下则不行。

然后我得到以下异常:

Caused by: org.w3c.dom.DOMException: Operation not supported on this type of node: [ExceptionDetail: null] at org.jboss.ws.core.soap.NodeImpl.convertDOMNode(NodeImpl.java:557) at org.jboss.ws.core.soap.NodeImpl.appendChild(NodeImpl.java:459) at org.apache.cxf.jaxws.JaxWsClientProxy.createSoapFault(JaxWsClientProxy.java:234) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:152)

我从网络服务得到的实际响应是:

ID: 6
Response-Code: 500
Encoding: UTF-8
Content-Type: text/xml; charset=utf-8
Headers: {Content-Length=[1925], content-type=[text/xml; charset=utf-8], Date=[Wed, 16 Oct 2013 05:40:21 GMT], Persistent-Auth=[true], Server=[Microsoft-IIS/7.5], X-Powered-By=[ASP.NET]}
Payload: 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body><s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="en-US">External Exception Message</faultstring>
<detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>External Exception Message</Message><StackTrace>...stacktrace from external system...</StackTrace><Type>XXXException</Type></ExceptionDetail></detail>
</s:Fault></s:Body>
</s:Envelope>

所以我的问题是如何使用 CXF 正确处理 SOAP 故障?我需要的是从响应中取出错误字符串。

当然可以解析返回的消息,但是这样会很麻烦。

我已经注册了一个自己的拦截器(扩展AbstractSoapInerceptor),它获取返回的soapmessage,但该消息仅包含带有响应的输入流,并且似乎无法识别内部的XML。

谢谢

最佳答案

问题已解决。经过更详细的调试,我发现问题实际上是由我使用 CXF 实现的 JBoss 4.2.3 引起的。

由于某种原因,JBoss WS 参与了该过程,并且无法解析错误消息的详细标记。删除详细信息标记后,我遇到了下一个异常:org.jboss.ws.core.soap.SOAPFaultElementImpl 的实例化异常。 这个类实际上不在我的类路径中,因为我认为我不需要使用 jbossws。现在我已经将其包含在内,一切都按预期工作!

关于java - 如何在CXF中处理来自外部系统的SOAP故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396324/

相关文章:

xml - 使用 perl 的 SOAP 客户端 - WSDL URL 可用

java - Java中使用的Excel数据?

JavaFX 与 Java Swing

c# - Elmah的异常处理

web-services - 什么是 SOAP 非 wsdl 模式选项中的 uri

soap - SOAP/WSDL 中的 API 能否轻松保持向后兼容?

javascript - 如何使用 node-soap 创建自定义请求

java - 使用 xuggler 设置 mp3 比特率

java - 在评估阶段使用 Gradle 插件配置属性

java - JBoss 7.1 如何添加模块