2016-07-06 6 views
0

は、私は(利用可能な場合とCheckedException)にSoapFaultにこれをアンマーシャリングし、例外として、それをスローする方法ファイルにファイルから生のXMLペイロードからSoapFaultをアンマーシャリングする方法は?

<?xml version="1.0" encoding="UTF-8"?> 
<ns2:Fault 
    xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:ns3="http://www.w3.org/2003/05/soap-envelope"> 
    <faultcode>ns2:Server</faultcode> 
    <faultstring>some Error</faultstring> 
    <detail> 
    <ns4:ApplicationSOAPFault xmlns:ns4="http://application.exception"> 
     <code>04</code> 
     <message>SimiError</message> 
    </ns4:ApplicationSOAPFault> 
    </detail> 
</ns2:Fault> 

をXMLペイロードを以下していると仮定しますか?我々は、レコード/プロキシモード中LogicalHandlerを使用してファイルシステムにWebサービス要求と応答ペイロードXMLをダンプすることをシミュレータを構築しようとしている。(つまり、サーバーをターゲットと有効な応答を得るために、Webサービスの呼び出しを行った後

背景

バック)

ターゲットサーバーがSoap Faultを返す場合、上記のSoapFaultがFile Systemにダンプされます。

シミュレータは、ダンプから非整列化再生モードマッチングレスポンスに切り替えられ()(JAXB.unmarshallで行う)バックサーバーれ

これは罰金しかし、シミュレータは、現在にSoapFault(および対応するCheckedException)をアンマーシャリングすることはできません動作しますExceptionとして投げる。

答えて

0

これを試してみてくださいしてください、

final SOAPMessage msg = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL) 
          .createMessage(new MimeHeaders(), new ByteArrayInputStream(yourSoapMessageWithFault.getBytes())); 
if (msg != null) { 
         SOAPEnvelope env = msg.getSOAPPart().getEnvelope(); 
         SOAPBody body = env.getBody(); 
         if (body != null && body.hasFault()) { 
          final SOAPFault fault = body.getFault();         
          final DetailEntry entry = (DetailEntry)fault.getDetail().getDetailEntries().next(); 
//now UNMarshall this entry to your custom exception class. 

}

関連する問題