Java 为什么';JAXB写出SWT小部件?
我有一个类来存储SWT小部件的列表Java 为什么';JAXB写出SWT小部件?,java,xml,jaxb,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 = widget
@XmlRootElement
class Test {
private List<Widget> widgets;
public List<Widget> getWidgets() {
return widgets;
}
public void setWidgets(List<Widget> widgets) {
this.widgets = widgets;
}
}
这是输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test>
<widgets/>
<widgets/>
<widgets/>
</test>
由于SWT小部件类没有JAXB注释,您需要用自己的小部件详细信息类(有注释)替换类中的注释,或者为将小部件映射到自己的详细信息类的属性实现
XmlJavaTypeAdapter
您可能还想使用
@XmlElement(name = "widget")
因此,您得到的是
而不是,因为SWT小部件类没有JAXB注释,您需要用自己的小部件详细信息类(有注释)替换类中的注释,或者为将小部件映射到自己的详细信息类的属性实现XmlJavaTypeAdapter
您可能还想使用
@XmlElement(name = "widget")
因此,您得到的是
而不是您的实现无法使用反射来确定小部件的子类,因此您需要在创建JAXBContext时包含它们
JAXBContext context = JAXBContext.newInstance(Test.class, Button.class, Label.class);
您的实现无法使用反射来确定Widget
的子类,因此在创建JAXBContext时需要包含它们
JAXBContext context = JAXBContext.newInstance(Test.class, Button.class, Label.class);
试试xstream试试xstream你是说我需要详细写下所有注释?SWT由许多小部件组成,因此我必须“记录”它们才能解析它?@humansg,SWT小部件没有定义它们的XML映射,这是非常正确的——如果它们定义了,肯定会有人尝试序列化它们。如何序列化回调?@humansg sorry没有查看Widget类,因此不知道您的最佳选择是什么-也许您可以更详细地描述希望包含在XMLJAXB(JSR-222)实现中的Widget的哪些属性不需要对模型类进行任何注释:@BlaiseDoughan谢谢,然后我学到了一些东西-只是用我们正在使用的impl尝试了一下,只要父(根)类被注释,它就可以工作。你的意思是我需要详细地写下所有注释?SWT由许多小部件组成,因此我必须“记录”它们才能解析它?@humansg,SWT小部件没有定义它们的XML映射,这是非常正确的——如果它们定义了,肯定会有人尝试序列化它们。如何序列化回调?@humansg sorry没有查看Widget类,因此不知道您的最佳选择是什么-也许您可以更详细地描述希望包含在XMLJAXB(JSR-222)实现中的Widget的哪些属性不需要对模型类进行任何注释:@BlaiseDoughan谢谢,然后我学到了一些东西-只是用我们正在使用的impl尝试了一下,只要父(根)类被注释,它就可以工作。但是org.eclipse.swt.widgets.Widget
是一个抽象的超类(),所以你的widgets
属性包含Widget
的子类。您的JAXBContext
需要以某种方式创建,以便它能够识别这些子类。我尝试将实际类放入其中,但它给了我IllegalAnnotationExceptions
我认为唯一的方法是定义自己的注释,如下所述。。我将尝试更改我的设计..但是org.eclipse.swt.widgets.Widget
是一个抽象的超类(),因此您的widgets
属性包含Widget
的子类。您的JAXBContext
需要以某种方式创建,以便它能够识别这些子类。我尝试将实际类放入其中,但它给了我IllegalAnnotationExceptions
我认为唯一的方法是定义自己的注释,如下所述。。我将尝试改变我的设计。。