获取UnmarshallingFailureException预期的元素是(无)at

时间:2014-02-06 22:55:32

标签: java spring jaxb spring-ws

以下是我用来调用服务的代码:

TaskRequest myrequest = objectFactory.createTaskRequest();
myrequest.setId("12");
JAXBElement jElem = new JAXBElement(
                    new QName("http://service.domain.com/", "taskResponse"),
                    TaskRequest.class, myrequest);

TaskResponse o = (TaskResponse) webServiceTemplate.marshalSendAndReceive(jElem);

我遇到了这个例外:

  

org.springframework.oxm.UnmarshallingFailureException:JAXB   解组例外;嵌套异常是   javax.xml.bind.UnmarshalException:意外元素   (uri:“http://service.domain.com/”,local:“taskResponse”)。    的预期元素为(无)   org.springframework.oxm.jaxb.Jaxb2Marshaller.convertJaxbException(Jaxb2Marshaller.java:794)

TaskResponse有以下注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TaskResponse", namespace = "http://message.domain.com/", propOrder = {
    "id",
    "name"
})
public class TaskResponse {...}

这是我的WebServiceTemplate配置:

WebServiceTemplate serviceTemplate = new WebServiceTemplate();    
serviceTemplate.setDefaultUri("http://mydomain.com/TaskWebService/taskServ");
serviceTemplate.setMessageFactory(saajSoapMessageFactory());
serviceTemplate.setMessageSender(httpMessageSender());
serviceTemplate.setMarshaller(marshaller());
serviceTemplate.setUnmarshaller(marshaller());

这是我的编组:

   @Bean
    public Jaxb2Marshaller marshaller() {
        final Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();

        jaxb2Marshaller.setContextPath("com.domain.message");
        return jaxb2Marshaller;
    }

这可能是什么原因?

我正在进行契约优先发展..

1 个答案:

答案 0 :(得分:0)

您的TaskResponse类似乎没有@XmlRootElement注释,因此编组错误。但是,根据错误跟踪,来自Web服务的响应似乎是空响应(而不是TaskResponse)。你能用SoapUI查看实际的响应是什么吗?