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