11

JAXBにはほとんど問題はありません。


与えられた:

  • Java 1.5; jaxb -jarsfromjaxws-2_0。
  • .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

アノテーションにあるデフォルト値は、マーシャリングを解除した後にのみ機能します。
これを元に戻す

<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を使用できます。

プラグインのWebサイトを参照してください。

そのドキュメントで説明されている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 に答える