gpt4 book ai didi

java - 为什么我的 jaxb2marshaller 不解码它之前编码的内容?

转载 作者:行者123 更新时间:2023-12-02 11:14:48 24 4
gpt4 key购买 nike

我正在努力使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com