When I send a SOAP request to the server, it returns the following error. I'm not sure how I can configure unmarshaller, I am going to send SOAP requests to several web services. WSDL is here .
I visited the following pages, but could not find a 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
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
Request
@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 for sending a request
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(); }
source share