我正在使用 CXF 2.6.2 从外部系统访问 Web 服务。存根是从 WSDL 文件生成的。当网络服务正确响应时,这可以正常工作,但在故障情况下则不行。
然后我得到以下异常:
原因:org.w3c.dom.DOMException:这种类型的节点不支持操作:[ExceptionDetail: null] at org.jboss.ws.core.soap.NodeImpl.convertDOMNode(NodeImpl.java:557) at org.jboss .ws.core.soap.NodeImpl.appendChild(NodeImpl.java:459) 在 org.apache.cxf.jaxws.JaxWsClientProxy.createSoapFault(JaxWsClientProxy.java:234) 在 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 正确处理肥皂故障?我需要的是从响应中获取故障字符串。
当然我可以解析返回的消息,但这会很麻烦。
我已经注册了一个自己的拦截器(扩展AbstractSoapInerceptor),它获取返回的soapmessage,但该消息仅包含一个带有响应的输入流,并且似乎无法识别其中的XML。
谢谢