java.lang.IllegalStateException:没有注册unmarshaller。检查WebServiceTemplate的配置 [英] java.lang.IllegalStateException: No unmarshaller registered. Check configuration of WebServiceTemplate

查看:410
本文介绍了java.lang.IllegalStateException:没有注册unmarshaller。检查WebServiceTemplate的配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我向服务器发送SOAP请求时,它返回以下错误。我不确定如何配置unmarshaller,我将向多个web服务发送SOAP请求。 WSDL

解决方案

您似乎没有在 webServiceTemplate unmarshaller $ c>。

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


When I send a SOAP request to the server it returns following error. I am not sure how I can configure unmarshaller, I am going to send SOAP requests to multiple webservices. WSDL is here.

I visited following pages but could not find a solution yet. 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 to send 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();
        }

解决方案

It seems that you didn't set the unmarshaller on your webServiceTemplate.

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

这篇关于java.lang.IllegalStateException:没有注册unmarshaller。检查WebServiceTemplate的配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆