使用Generic包装器对象列出一个列表

时间:2013-12-08 02:30:09

标签: jaxb eclipselink marshalling moxy

我正在尝试遵循教程here,似乎在努力进行序列化。当我编组一个对象时,我得到以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<WrapBean>com.lists.beans.ChildBean@2df36f51com.lists.beans.ChildBean@49114668</WrapBean>

我期待更像这样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<WrapBean>
  <ChildBean>
    <first_name>[name]</first_name>
    <last_name>[name[</last_name>
    <age>[age]</age>
  </ChildBean>
  <ChildBean>
    ...
  </ChildBean>
</WrapBean>

这是我的主要方法:

    public static void main(String[] args) throws Exception {
        JAXBContext context = (JAXBContext) JAXBContext.newInstance(WrapBean.class);

        ArrayList<ChildBean> children = new ArrayList<ChildBean>();
        ChildBean c1 = new ChildBean();
        c1.setFname("larry");
        c1.setLname("sanderson");
        c1.setAge("13");
        children.add(c1);

        ChildBean c2 = new ChildBean();
        c2.setFname("amber");
        c2.setLname("smith");
        c2.setAge("11");
        children.add(c2);     

        QName qName = new QName("WrapBean");
        WrapBean wrapper = new WrapBean(children);
        JAXBElement<WrapBean> jaxbElement = new JAXBElement<WrapBean>(qName, WrapBean.class, wrapper);
        marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(jaxbElement, System.out);
    }

如果需要,我可以发布bean类,但是只有setter和getter以及使元素名称正确所需的注释。任何人都可以帮助我解决我所缺少的问题吗?

编辑:我还想提一下,包装器对象与教程完全相同:

public class Wrapper<T> {

    private List<T> items;

    public Wrapper() {
        items = new ArrayList<T>();
    }

    public Wrapper(List<T> items) {
        this.items = items;
    }

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

}

1 个答案:

答案 0 :(得分:1)

您需要让JAXBContext知道集合中的项目。

JAXBContext context = JAXBContext.newInstance(WrapperBean.class, ChildBean.class);