以下是我用来调用该服务的代码:
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/”,本地:“ 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;
}
这可能是什么原因?
我正在进行合同优先的开发。
最佳答案
看来您的TaskResponse
类没有@XmlRootElement
批注,因此出现编组错误。但是,根据错误跟踪,来自Web服务的响应似乎是空响应(不是TaskResponse)。您能用SoapUI检查一下实际响应是什么吗?