为什么JAXB没有写出SWT Widgets?

时间:2012-07-25 03:27:46

标签: java xml jaxb

我有一个类来存储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>

2 个答案:

答案 0 :(得分:1)

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

JAXBContext context = JAXBContext.newInstance(Test.class, Button.class, Label.class);

答案 1 :(得分:0)

由于SWT Widget类不具有JAXB注释,因此您需要在您的类中使用您自己的窗口小部件详细信息类(具有注释)替换它,或者为该属性实现映射XmlJavaTypeAdapter您自己的详细信息类的小部件。

您可能还想使用

    @XmlElement(name = "widget")

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