我在jaxb2marshaller配置中苦苦挣扎,无法使用从wsdl文件生成的类。
我的jaxb2marshaller
public Jaxb2Marshaller marshaller() {
final Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPaths("org.otheruri", "org.tempuri");
return marshaller;
}
我准备了一个类的结构,并将它们通过marshaller.marshal传递以获得xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:ValidateResponse xmlns="http://otheruri.org" xmlns:ns2="http://tempuri.org/">
<ns2:ValidateResult>
<ArrayOfPerson>
<Person><NawNumber>personNAW</NawNumber></Person>
</ArrayOfPerson>
</ns2:ValidateResult>
</ns2:ValidateResponse>
但是,当我使用此xml并运行marshaller.unmarshall时,ValidateResult.arrayOfPerson为null。没有堆栈跟踪或任何东西。
我生成的类如下所示
package org.tempuri
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"validateResult"
})
@XmlRootElement(name = "ValidateResponse")
public class ValidateResponse {
@XmlElementRef(name = "ValidateResult", namespace = "http://tempuri.org/", type = JAXBElement.class, required = false)
protected JAXBElement<org.otheruri.ValidateResponse> validateResult;
public JAXBElement<org.otheruri.ValidateResponse> getValidateResult() {
return validateResult;
}
public void setValidateResult(JAXBElement<org.otheruri.ValidateResponse> value) {
this.validateResult = value;
}
}
和
package org.otheruri
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ValidateResponse", propOrder = {
"persons",
"userLoggedIn"
})
public class ValidateResponse {
@XmlElementRef(name = "Persons", namespace = "http://otheruri.org", type = JAXBElement.class, required = false)
protected JAXBElement<ArrayOfPerson> persons;
@XmlElementRef(name = "UserLoggedIn", namespace = "http://otheruri.org", type = JAXBElement.class, required = false)
protected JAXBElement<ValidateCredentialsResponse> userLoggedIn;
public JAXBElement<ArrayOfPerson> getPersons() {
return persons;
}
public void setPersons(JAXBElement<ArrayOfPerson> value) {
this.persons = value;
}
public JAXBElement<ValidateCredentialsResponse> getUserLoggedIn() {
return userLoggedIn;
}
public void setUserLoggedIn(JAXBElement<ValidateCredentialsResponse> value) {
this.userLoggedIn = value;
}
}
编辑
所以经过一段时间的调试之后,我知道出了什么问题。由于未知原因,创建的xml具有ArrayOfPerson节点(如类名),而不是Persons(在@XmlElementRef中指定)。我还是不知道为什么会这样
最佳答案
因此,最终看来,我生成的对象工厂有2个方法返回了相同的JaxbObject并接受了ArrayOfPerson对象,并且名称非常相似,但是在@XmlElementDecl中指定了不同的名称,因此,我当然使用了错误的方法来生成xml,因此我以后不能消费了。 :/
关于java - 为什么我的jaxb2marshaller不解码以前打包的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50368425/