如何在JAXB中编组一个未包装的集合?

时间:2011-11-03 16:46:21

标签: java jaxb jaxb2

这是我的班级:

@XmlRootElement(name = "foo")
@XmlAccessorType(XmlAccessType.NONE)
public class Foo {
  @XmlElement
  public Collection getElements() {
    List elements = new ArrayList();
    elements.add(new Bar);
    elements.add(new Bar);
    return elements;
  }
}

班级Bar也很简单:

@XmlType(name = "bar")
@XmlAccessorType(XmlAccessType.NONE)
public static final class Bar {
  @XmlElement
  public String getMessage() {
    return "hello, world!";
  }
}

这是我在编组Foo之后得到的:

<foo>
  <elements xsi:type="foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <message>hello, world!</message>
  </elements>
  <elements xsi:type="foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <message>hello, world!</message>
  </elements>
</foo>

虽然我期待得到:

<foo>
  <bar>
    <message>hello, world!</message>
  </bar>
  <bar>
    <message>hello, world!</message>
  </bar>
</foo>

我应该修理什么?

1 个答案:

答案 0 :(得分:3)

您需要使用elements注释@XmlElement(name="bar")属性:

@XmlRootElement(name = "foo")
@XmlAccessorType(XmlAccessType.NONE)
public class Foo {
  @XmlElement(name="bar")
  public Collection getElements() {
    List elements = new ArrayList();
    elements.add(new Bar);
    elements.add(new Bar);
    return elements;
  }
}