1

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を認識していないようです。

ありがとう

4

1 に答える 1

1

問題が解決しました。さらに詳細なデバッグを行った後、CXF 実装を使用している JBoss 4.2.3 が実際に問題の原因であることがわかりました。

何らかの理由で JBoss WS がプロセスに関与し、これは障害メッセージの詳細タグを渡すことができませんでした。詳細タグを削除した後、次の例外に遭遇しました: org.jboss.ws.core.soap.SOAPFaultElementImpl のインスタンス化例外です。jbossws を使用する必要はないと思っていたので、このクラスは実際にはクラスパスにありませんでした。今、私はそれを含め、すべてが期待どおりに機能しています!

于 2013-10-16T13:18:22.863 に答える