Wie unmarshal eine SOAP-Fault-in einem FaultMessageResolver?

Ich bin neu in Spring-WS, und langsam meinen Kopf um ihn herum gewickelt. Jetzt Schreibe ich einen einfachen client zur Kommunikation mit einem vorhandenen WS. Ich bin mit dem WebServiceTemplate und die marshalSendAndReceive Methode. Alles funktioniert einwandfrei.

Jedoch, wenn ein SOAP-fault Auftritt, wird die WST wirft einen SoapFaultClientException. Ich bemerkte, dass ich meine eigenen FaultMessageResolver zu prüfen, was innerhalb der SOAP-fault. Jedoch, wenn ich versuche zu unmarshal die WebServiceMessage in meinem FaultMessageResolver, bekomme ich die folgende Fehlermeldung:

JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Fault"). Expected elements are ....

Natürlich, mein unmarshaller ist nicht richtig konfiguriert. Habe ich zum generieren der JAXB-Fehler-Modell selbst mit xjc dann in der Lage sein, um unmarshal der Fehler??? Ich bin etwas erstaunt, dass dieser nicht bereits vorhanden ist.

Gibt es einen besseren Weg, um extra meine benutzerdefinierten Fehlerinformationen aus meiner soap:fault-Antwort? Meine Fehlermeldung sieht in etwa wie folgt, und ich versuche, zu extrahieren/Zugriff auf die serviceErrors Element.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring>Blaze Data Error</faultstring>
         <detail>
            <ns14:serviceErrors xmlns="http://www.nb.com/ClientServices/LendingSimulation/CalculateProfitabilityRequest" xmlns:ns13="http://www.nb.com/fw/errorMgmt" xmlns:ns14="http://www.nb.com/ClientServices/LendingSimulation/V1" >
               <ns13:faultstring>ServiceExecutionError</ns13:faultstring>
               <ns13:serviceError>
                  <ns13:errorCode>C10F1013</ns13:errorCode>
                  <ns13:errorType>B</ns13:errorType>
                  <ns13:errorMessage>Unable to retreive additional data</ns13:errorMessage>
                  <ns13:fieldName>Message error received from PHClient :  [An unexpected error code was received : system=PH context=[empty]]</ns13:fieldName>
                  <ns13:systemId>Calculator</ns13:systemId>
                  <ns13:time>2012-06-19 14:45:10.151-0400</ns13:time>
               </ns13:serviceError>
            </ns14:serviceErrors>
         </detail>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

Dank!

Eric

InformationsquelleAutor Eric B. | 2012-06-19
Schreibe einen Kommentar