2016-07-06 9 views
0

Angenommen, ich habe folgende xml Nutzlast in einerWie entziffern Sie SoapFault von roher XML-Nutzlast aus einer Datei?

<?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> 

Datei Wie dies in eine SoapFault entordnen (und CheckedException falls vorhanden) und als Ausnahme auslösen?

Hintergrund

Wir versuchen, einen Simulator zu bauen, der die WebService Request und Response Nutzlast xml Filesystem mit LogicalHandler während laufender Aufnahme/Proxy-Modus-Dumps. (Dh nach webservice Anruf-Server zum Ziel und gültige Antwort zu erhalten zurück)

Falls der Zielserver Soap Fault zurückgibt, wird SoapFault wie oben in das Dateisystem ausgelagert.

Wenn Simulator, um die Wiedergabe-Modus Matching Antwort wechselt von der Müllhalde entordnet ist Server zurück (done mit JAXB.unmarshall())

Dies funktioniert jedoch Simulator zur Zeit nicht in der Lage ist SoapFault (und entsprechende CheckedException) entordnen und wirf es als Ausnahme aus.

Antwort

0

dieses Versuchen Sie bitte,

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. 

}