java - JAXBElement 优于 ArrayList?

标签 java jaxb marshalling

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

相关文章:

java - 应用程序停止工作 : Could not find class 'android.graphics.drawable.RippleDrawable'

java - 如何使用数字证书创建Web服务

c++ - 如何从 C++ 中的二进制数据包中提取 GUID?

c# mashal const std::list<object> 来自 c++ dll

java - 小 cucumber / cucumber - 我们可以将 "When"语句(例如 "Given"s)分组到 "Backgound"中吗?

java - 如何从另一个 fragment 更改 ViewPager fragment ?不做新事

java - 使用 WildFly 中另一个模块的 JAXBContext 进行解码

java - JAXB 2.x : How to override an XmlElement annotation from parent class - Mission Impossible?

java - 如何为xjc编写外部绑定(bind)文件?

C# AppDomains 和线程