gpt4 book ai didi

java - JAXBElement 优于 ArrayList?

转载 作者:行者123 更新时间:2023-11-30 04:51:31 27 4
gpt4 key购买 nike

如何编码 JAXBElement 列表?

例如,我有一个无法注释的 POJO:

public class APojo {

private String aString;

public APojo() {
super();
}

public String getAString() {
return aString;
}

public void setAString(String aString) {
this.aString = aString;
}
}

所以我正在这样做

APojo aPojo = new APojo();
aPojo.setaString("a string");
JAXBElement<APojo> aJAXBedPojo = new JAXBElement<APojo>(new QName("apojo"), APojo.class, aPojo);

哪个被正确编码。

但是

List<JAXBElement<APojo>> list = new ArrayList<JAXBElement<APojo>>();

不工作:当我这样做时

JAXBContext context = JAXBContext.newInstance(APojo.class, ArrayList.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(list, System.out);

运行时提高:

[com.sun.istack.internal.SAXException2: unable to marshal type "java.util.ArrayList" as an element because it is missing an @XmlRootElement annotation]

这是正常的,因为 ArrayList 没有注释。

我知道我可以创建一个围绕 ArrayList 的包装器并用 @XmlRootElement 对其进行注释,这样我就可以整理这个包装器。

我正在寻找没有这样的包装器的解决方案。是否可以创建一个 JAXBElement ,其中 T 是 ArrayList ?或者类似的东西?

最佳答案

我强烈建议您使用 XmlAdapter 。您只需使用编码器注册适配器,它将使用您带注释的适配器类来代替您无法注释的类。

此外,我认为包装器类比尝试在没有包装器的情况下执行某些操作更干净。

话虽如此,如果您确实愿意,可以尝试以下操作:

List<JAXBElement<APojo>> list = new ArrayList<JAXBElement<APojo>>();
JAXBElement<List<JAXBElement<APojo>>> listElement = new JAXBElement<List<JAXBElement<APojo>>>(new QName("apojolist"), List.class, list);

关于java - JAXBElement 优于 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736385/

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