1

我有一个类来存储 SWT 小部件列表。

@XmlRootElement
class Test {
    private List<Widget> widgets;

    public List<Widget> getWidgets() {
        return widgets;
    }

    public void setWidgets(List<Widget> widgets) {
        this.widgets = widgets;
    }
}

我使用 JAXB 将其编组为 XML。但是,这些小部件未编组。

Test t = new Test();
t.setWidgets(widgets);
JAXBContext context = JAXBContext.newInstance(Test.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(t, System.out);

这是输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test>
    <widgets/>
    <widgets/>
    <widgets/>
</test>
4

2 回答 2

1

您的JAXB (JSR-222)实现无法确定Widget使用反射的子类,因此您需要在创建 JAXBContext 时包含它们。

JAXBContext context = JAXBContext.newInstance(Test.class, Button.class, Label.class);
于 2012-07-25T09:32:50.253 回答
0

由于 SWT Widget 类没有 JAXB 注释,因此您需要在类中将其替换为您自己的小部件详细信息类(具有注释),或者XmlJavaTypeAdapter为该属性实现一个将 Widget 映射到您自己的详细信息类的属性。

您可能还想使用

    @XmlElement(name = "widget")

所以你得到<widget>而不是<widgets>

于 2012-07-25T06:45:36.793 回答