CXF 2.6.2 を使用して、外部システムから Web サービスにアクセスしています。スタブは WSDL ファイルから生成されます。これは、Web サービスが正しく応答する場合は正常に機能しますが、障害が発生した場合には機能しません。
次に、次の例外が発生します。
原因: 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)
Web サービスから得られる実際の応答は次のとおりです。
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 でソープフォールトを正しく処理するにはどうすればよいですか? 必要なのは、応答から障害文字列を取得することです。
もちろん、返されたメッセージを解析することはできますが、これは非常に面倒です。
返されたsoapmessageを取得する独自のインターセプター(AbstractSoapInerceptorを拡張)をすでに登録しましたが、メッセージには応答を含む入力ストリームのみが含まれており、内部のXMLを認識していないようです。
ありがとう