JAXB几乎没有问题。
鉴于:
必需
获取完全代表xml的java对象(根元素)以及默认值初始化的每个成员。
当我尝试在没有显式设置值的情况下编组xml时,默认值不会明确...是否有任何方法可以使用默认值编组xml而无需自定义生成的类?
.xsd的例子:
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="d_int"/>
<xs:element ref="d_double"/>
<xs:element ref="d_string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="d_int" type="xs:int" default="-1"/>
<xs:element name="d_double" type="xs:double" default="-1.0"/>
<xs:element name="d_string" type="xs:string" default="false"/>
和java class:
public class Document {
@XmlElement(name = "d_int", defaultValue = "-1")
protected int dInt;
@XmlElement(name = "d_double", defaultValue = "-1.0")
protected double dDouble;
@XmlElement(name = "d_string", required = true, defaultValue = "Default")
protected String dString;
...
}
答案 0 :(得分:19)
注释中的默认值仅在解组之后才有效 解散这个
<document>
<d_int/>
<d_double/>
<d_string/>
</document>
您将获得具有默认值(-1,-1.0,“默认”)
的对象如果要将默认值设置为编组,则应执行此操作
public class Document {
@XmlElement(name = "d_int", defaultValue = "-1")
protected int dInt = 100;
@XmlElement(name = "d_double", defaultValue = "-1.0")
protected double dDouble = -100;
@XmlElement(name = "d_string", required = true, defaultValue = "Default")
protected String dString = "def";
...
}
jaxb仅为解组
生成默认值答案 1 :(得分:1)
要从XSD提供的默认值初始化类成员,可以使用XJC的default-value-plugin。
请注意,该文档中说明的ant任务定义对我不起作用。 As explained here,XJC和插件的类路径必须分开。调用插件时指定插件的路径对我有用:
<xjc schema="some.xsd" >
<arg value="-Xdefault-value"/>
<classpath>
<pathelement location="lib/xjc-plugins/jaxb2-default-value-1.1.jar"/>
</classpath>
</xjc>