11

JAXB 几乎没有问题。


鉴于:

  • Java 1.5;来自 jaxws-2_0 的 jaxb -jars。
  • .xsd 方案和生成的 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类:

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;
...
}
4

2 回答 2

22

注释中的默认值仅在unmarshalling之后才有效。
解组这个

<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 仅为解组生成默认值

于 2012-08-20T17:18:29.787 回答
1

对于从 XSD 提供的默认值初始化类成员,您可以使用 XJC 的 default-value-plugin。

查看插件的网站

请注意,该文档中解释的 ant 任务定义对我不起作用。正如这里所解释的,XJC 和插件的类路径必须分开。调用插件时指定插件的路径对我有用:

<xjc schema="some.xsd" >
    <arg value="-Xdefault-value"/>
    <classpath>
        <pathelement location="lib/xjc-plugins/jaxb2-default-value-1.1.jar"/>
    </classpath>
</xjc>
于 2015-04-30T13:28:52.020 回答