使用默认值初始化JAXB对象

时间:2012-08-20 15:42:36

标签: jaxb xsd default-value

JAXB几乎没有问题。


鉴于:

  • Java 1.5;来自jaxws-2_0的jaxb -jars。
  • .xsd scheme并生成JAXB类。
  • .xsd中的每个简单元素都有默认值。结果类成员有注释 “ @XmlElement(name =”cl_fname“,required = true,defaultValue =”[ _ __ _ __]“)

必需


获取完全代表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;
...
}

2 个答案:

答案 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。

请参阅website of the 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>