2

私は JAXB を使用して、独自に考案した XSD からドメイン オブジェクトを生成しています。以下に示す XSD の関連フラグメントでは、親の Job 要素内にネストされた preProcessing 要素があります。予想どおり、これPreProcessingは親クラス内の内部クラスに解決されます。Job

<xsd:complexType name="Job">
    <xsd:element name="preProcessing" nillable="false">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="mask" type="MaskTypeEnum" />
                <xsd:element name="userDefinedMaskFile" type="xsd:string" />
                <xsd:element name="experimentalDesign" type="xsd:boolean" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>

Job内部クラスへのアクセスは、親クラスで生成された get および set メソッドのペアを介して行われます。

public Job.PreProcessing getPreProcessing() {
    return preProcessing;
}
public void setPreProcessing(Job.PreProcessing value) {
    this.preProcessing = value;
}

PreProcessingJava コードで、 のインスタンスに対してクラスのインスタンスが常に存在することを保証できるようにしたいと考えていますJob。この目的のために、JAXB 生成を次のいずれかにカスタマイズできるようにしたいと考えています。

1)クラス コンストラクターPreProcessingでインスタンスをインスタンス化する 2) getter メソッドが呼び出されたときにインスタンスを遅延してインスタンス化する (リストの場合と同様に、これは素晴らしいことです)JobPreProcessing

PreProcessingsetter メソッドは冗長になります (実際、インスタンスは最終的なものであるため、呼び出されるべきではありません)。

これまで、遅延インスタンス化、デフォルト値、ネストされた要素などの JAXB + フレーズを検索し、空白を描画しました。一部のクラスのカスタマイズはカスタム XMLAdapter を使用して実行できるようですが、私のシナリオは実際にはマーシャリング/アンマーシャリングとは関係なく、Java アプリケーションでのドメイン オブジェクトの操作に関連しています。

4

0 に答える 0