如何编码 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/