Java.lang.IllegalStateException: Aucun unmarshaller enregistré. Vérifiez la configuration de WebServiceTemplate


Lorsque j'envoie une demande SOAP au serveur, elle renvoie l'erreur suivante. Je ne sais pas comment je peux configurer unmarshaller, je vais envoyer des demandes SOAP à plusieurs webservices. WSDL est ici.

J'ai visité les pages suivantes mais je n'ai pas encore trouvé de solution. 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

Savonnerie

@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

Demande

@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 pour envoyer la demande

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();
        }

entrez la description de l'image ici

Author: Community, 2016-01-13

1 answers

Il semble que vous n'ayez pas défini le unmarshaller sur votre webServiceTemplate.

webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);
 9
Author: Rozart, 2016-01-13 11:55:14