Java-Spring-Web-Service-Client-Fehler-Handling

Ich geschrieben habe, eine web-service-client (mit Java, Spring und JAXB Marshaller), das mit der UPS-web-service. Wenn ich senden Sie eine gültige Anforderung funktioniert auch alles. Wenn ich senden Sie eine ungültige Anfrage (Gewicht > 150 lbs), dann die UPS web service antwortet mit einem SOAP-Fehler. Die client-Anwendung nur schlägt mit einem

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

Offensichtlich ist mein Programm ist nicht in der Lage, das zu entziffern, SOAP-fault der durch den Webdienst zurückgegeben. Ich schrieb eine benutzerdefinierte FaultMessageResolver, aber es wird nicht aufgerufen. Hier ist der code:

public class UpsRateClient extends WebServiceGatewaySupport {
    public UpsRateClient(WebServiceMessageFactory messageFactory) {
        super(messageFactory);
        getWebServiceTemplate().setFaultMessageResolver(new UpsFaultMessageResolver());
    }

    public RateResponse getRate(RateRequest rateRequest) {
        return (RateResponse) getWebServiceTemplate().marshalSendAndReceive(rateRequest, new UpsRequestWSMC());
    }
    private class UpsFaultMessageResolver implements FaultMessageResolver {
        public void resolveFault(WebServiceMessage message) throws IOException{
            System.out.println("Inside UpsFaultMessageResolver");   
        }
    }
}

Vielen Dank für Ihre Zeit!

  • Nimm einen wireshark trace.Mein Gedanke ist, dass vielleicht der web service sendet die SOAP-fault mit (fälschlicherweise) eine 200OK HTTP anstelle eines 500 Internal Server error und der client versucht, behandeln Sie es als eine gültige Antwort
  • Du hast Recht! Das ist, was passiert ist. Wie bekomme ich dieses Problem dann? Danke für die Antwort, user384706!
  • user544192, können Sie bitte zeigen Sie mir einige Ihrer code oder kann s oem nützlicher link darüber, wie Sie den Aufruf/das konsumieren des UPS webservice und Weitergabe/Empfang von POJOs? Ich bin mit ein wenig Schwierigkeiten zu verstehen, die Art und Weise, die ich brauche zu senden POJOs mit einem web-service, dass muss ich anrufen. Schicken Sie jede POJO-Parameter an die web service? Wenn ja, dann wie machen Sie POJOs in Ihrer Anwendung, die nur die UPS-web-service zu verstehen? Dankbar für Ihre Hilfe. Danke.
InformationsquelleAutor user544192 | 2011-09-24
Schreibe einen Kommentar