如何(un)使用JAXB2将列表或数组编组为根元素?

时间:2013-01-24 15:35:16

标签: arrays list jaxb jaxb2

我想使用JAXB2注释对文档进行编组和解组,其结构如下:

<mylist>
  <element />
  <element />
  <element />
</mylist>

这是一个格式良好的XML文档,它代表了一系列元素。

显而易见的事情是导致包含列表的某种根元素:

@XmlRootElement(name="container")
public class Container {
    @XmlElement
    @XmlElementWrapper(name="mylist")
    public List<Element> getElements() {...}
}

但后来我在马歇尔上找到了一个带有多余根元素的文件:

<container>
  <mylist>
    <element />
    <element />
    <element />
  </mylist>
</container>

我正在努力解决如何使用JAXB2执行此操作 - 如何(un)编组未包含其他对象的列表或数组?

1 个答案:

答案 0 :(得分:1)

您可以创建一个通用列表包装类,它可以包含使用@XmlRootElement注释的任何类的集合。编组时,您可以将其包装在JAXBElement的实例中以获取所需的根元素。

import java.util.*;
import javax.xml.bind.annotation.XmlAnyElement;

public class Wrapper<T> {

    private List<T> items = new ArrayList<T>();

    @XmlAnyElement(lax=true)
    public List<T> getItems() {
        return items;
    }

}

完整示例