2016-01-13 11 views
6

Wenn ich eine SOAP-Anfrage an den Server senden, wird der folgende Fehler zurückgegeben. Ich bin nicht sicher, wie ich Unmarshaller konfigurieren kann, ich werde SOAP-Anfragen an mehrere Webservices senden. WSDL ist here.java.lang.IllegalStateException: Kein Unmarshaller registriert. Überprüfen Sie die Konfiguration von WebServiceTemplate

Ich besuchte folgende Seiten, konnte aber noch keine Lösung finden. 1, 2, 3

java.lang.IllegalStateException: No unmarshaller registered. Check configuration of WebServiceTemplate. 
    at org.springframework.ws.client.core.WebServiceTemplate$3.extractData(WebServiceTemplate.java:406) 
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:598) 
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:539) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:386) 

-Code

SearchFlights

@XmlRootElement(name = "SearchFlights") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class SearchFlights { 
    @XmlElement(name = "SoapMessage") 
    private SoapMessage soapMessage; 

    getter and setter 

Soapmessage

@XmlRootElement(name = "SoapMessage") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class SoapMessage { 
    @XmlElement(name = "Username") 
    private String username; 
    @XmlElement(name = "Password") 
    private String password; 
    @XmlElement(name = "LanguageCode") 
    private String languageCode; 
    @XmlElement(name = "Request") 
    private Request request; 

    getters and setters 

Anfrage

@XmlRootElement(name = "Request") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Request { 
    @XmlElement(name = "Departure") 
    private String departure; 
    @XmlElement(name = "Destination") 
    private String destination; 
    @XmlElement(name = "DepartureDate") 
    private String departureDate; 
    @XmlElement(name = "ReturnDate") 
    private String returnDate; 
    @XmlElement(name = "NumADT") 
    private int numADT; 
    @XmlElement(name = "NumINF") 
    private int numInf; 
    @XmlElement(name = "NumCHD") 
    private int numCHD; 
    @XmlElement(name = "CurrencyCode") 
    private String currencyCode; 
    @XmlElement(name = "WaitForResult") 
    private boolean waitForResult; 
    @XmlElement(name = "NearByDepartures") 
    private boolean nearByDepartures; 
    @XmlElement(name = "NearByDestinations") 
    private boolean nearByDestinations; 
    @XmlElement(name = "RROnly") 
    private boolean rronly; 
    @XmlElement(name = "MetaSearch") 
    private boolean metaSearch; 

getters and setters 

jaxb.index

SearchFlights 
Flight 
Flights 
Leg 
Legs 
Outbound 
Request 
Response 
SoapMessage 

-Code Anfrage zu senden

import javax.xml.soap.MessageFactory; 
import javax.xml.soap.SOAPConstants; 

import org.springframework.oxm.jaxb.Jaxb2Marshaller; 
import org.springframework.stereotype.Service; 
import org.springframework.web.client.RestClientException; 
import org.springframework.web.client.RestTemplate; 
import org.springframework.ws.client.core.WebServiceTemplate; 
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; 
...... 
    // populate searchFlights and other classes to create request 
    try { 
     SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory(
       MessageFactory.newInstance()); 
     messageFactory.afterPropertiesSet(); 

     WebServiceTemplate webServiceTemplate = new WebServiceTemplate(
       messageFactory); 
     Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 

     marshaller.setContextPath("com.myproject.flights.wegolo"); 
     marshaller.afterPropertiesSet(); 

     webServiceTemplate.setMarshaller(marshaller); 
     webServiceTemplate.afterPropertiesSet(); 



      Response response = (Response) webServiceTemplate 
          .marshalSendAndReceive( <<< ERROR is on this line 
           "http://www5v80.elsyarres.net/service.asmx", 
            searchFlights, 
            new WebServiceMessageCallback() { 
            public void doWithMessage(WebServiceMessage message) 
             { 

        ((SoapMessage)message).setSoapAction("http://www5v80.elsyarres.net/searchFlights"); 
             } 
            } 
           ); 
      Response msg = (Response) response; 
      System.err.println("Wegolo >>>" 
        + msg.getFlights().getFlight().size()); 
     } catch (Exception s) { 
      s.printStackTrace(); 
     } 

enter image description here

+0

Ihr Beispiel hat mir sehr geholfen. Vielen Dank @Rozart auch –

Antwort

9

Es scheint, dass Sie nicht die Unmarshaller auf webServiceTemplate gesetzt haben.

webServiceTemplate.setMarshaller(marshaller); 
webServiceTemplate.setUnmarshaller(marshaller); 
Verwandte Themen