2016-01-13 5 views
6

की कॉन्फ़िगरेशन जांचें जब मैं सर्वर को SOAP अनुरोध भेजता हूं तो यह निम्न त्रुटि देता है। मुझे यकीन नहीं है कि मैं unmarshaller को कैसे कॉन्फ़िगर कर सकता हूं, मैं एकाधिक webservices को SOAP अनुरोध भेजने जा रहा हूं। डब्ल्यूएसडीएलhere है।java.lang.IleglegalStateException: कोई unmarshaller पंजीकृत नहीं है। WebServiceTemplate

मैंने निम्नलिखित पृष्ठों का दौरा किया लेकिन अभी तक समाधान नहीं मिला। 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) 

कोड

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 

अनुरोध

+०१२३५१६४१०
@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 

कोड अनुरोध

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

आपके उदाहरण ने मुझे बहुत मदद की। @Rozart भी धन्यवाद –

उत्तर

9

भेजने के लिए ऐसा लगता है आप अपनी webServiceTemplate पर unmarshaller सेट नहीं किया है।

webServiceTemplate.setMarshaller(marshaller); 
webServiceTemplate.setUnmarshaller(marshaller); 
संबंधित मुद्दे