Search code examples
javaspringweb-servicesjaxbwsdl

Need to match my soap request with what SoapUI is sending


I am sending a request to a webservice but it seems the request is invalid. I am sending a similar request using SoapUI and the webservice accepts it. I need to change my request to what SoapUI sends. How can I add namespaces to my request? WSDL is here.

I visited following pages but could not find a solution yet. 1,2,3

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 WegoloSoapMessage {
    @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
WegoloSoapMessage

Code to send request

    try {
        SaajSoapMessageFactory soapMsgFac = new SaajSoapMessageFactory(
                MessageFactory.newInstance());
        soapMsgFac.afterPropertiesSet();

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

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

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

        Response response = (Response) webServiceTemplate
                .marshalSendAndReceive(
                        "http://www5v80.elsyarres.net/service.asmx",
                        searchFlights,
                        new WebServiceMessageCallback() {
                            public void doWithMessage(WebServiceMessage message) 
                            {
                                ((SoapMessage)message).setSoapAction("ElsyArres.API/SearchFlights");
                            }
                       }
                   );

        Response msg = (Response) response;
        System.err.println("Wegolo >>>"
                + msg.getFlights().getFlight().size());
    } catch (Exception s) {
        s.printStackTrace();
    }
}

My Request

enter image description here enter image description here

SoapUI request

enter image description here enter image description here


Solution

  • In your request there is no namesapce before elements like in request from SoapUI.

    For example your element:

    <SearchFlights>
    

    SoupUI element:

    <els:SearchFlights>
    

    You should add namespace xmlns:els="ElsyArres.API" and prefix before all elements using code form here or here or here.