Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的jaxb2marshaller没有解开它之前所编组的内容?_Java_Jaxb_Jaxb2 - Fatal编程技术网

Java 为什么我的jaxb2marshaller没有解开它之前所编组的内容?

Java 为什么我的jaxb2marshaller没有解开它之前所编组的内容?,java,jaxb,jaxb2,Java,Jaxb,Jaxb2,我正在努力使用jaxb2marshaller配置来处理从wsdl文件生成的类 我的马歇尔 public Jaxb2Marshaller marshaller() { final Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setContextPaths("org.otheruri", "org.tempuri"); return marshaller; } 我准备了一个类的结构,并通

我正在努力使用jaxb2marshaller配置来处理从wsdl文件生成的类

我的马歇尔

 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。没有stacktrace之类的东西

我生成的类如下所示

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.tempuri
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=),比例={
“验证结果”
})
@XmlRootElement(name=“ValidateResponse”)
公共类验证响应{
@XmlElementRef(name=“ValidateResult”,命名空间=”http://tempuri.org/,type=JAXBElement.class,必需=false)
受保护的JAXBElement验证结果;
公共JAXBElement getValidateResult(){
返回validateResult;
}
public void setValidateResult(JAXBElement值){
this.validateResult=值;
}
}

package org.otheruri
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“ValidateResponse”,比例器={
“人”,
“userLoggedIn”
})
公共类验证响应{
@xmlementref(name=“Persons”,名称空间=”http://otheruri.org,type=JAXBElement.class,必需=false)
受保护人员;
@xmlementref(name=“UserLoggedIn”,名称空间=”http://otheruri.org,type=JAXBElement.class,必需=false)
受保护的JAXBElement userLoggedIn;
公众人物{
返回人员;
}
公共无效设置人员(JAXBElement值){
这就是人=价值;
}
公共JAXBElement getUserLoggedIn(){
返回userLoggedIn;
}
public void setUserLoggedIn(JAXBElement值){
this.userLoggedIn=值;
}
}
编辑


所以,经过一段时间和大量的脱布,我知道什么是错的。由于未知原因,创建的xml具有ArrayOfPerson节点(如类名),而不是Persons(在@XmlElementRef中指定)。我仍然不知道为什么会发生这种情况,所以最终我生成的对象工厂似乎有两个方法返回相同的JaxbObject并接受ArrayOfPerson对象和非常相似的名称,但在@XmlElementDecl中指定了不同的名称,当然我使用了错误的方法生成xml,所以我以后不能吃了/

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;
    }

}