私は 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;
}
PreProcessing
Java コードで、 のインスタンスに対してクラスのインスタンスが常に存在することを保証できるようにしたいと考えていますJob
。この目的のために、JAXB 生成を次のいずれかにカスタマイズできるようにしたいと考えています。
1)クラス コンストラクターPreProcessing
でインスタンスをインスタンス化する 2) getter メソッドが呼び出されたときにインスタンスを遅延してインスタンス化する (リストの場合と同様に、これは素晴らしいことです)Job
PreProcessing
PreProcessing
setter メソッドは冗長になります (実際、インスタンスは最終的なものであるため、呼び出されるべきではありません)。
これまで、遅延インスタンス化、デフォルト値、ネストされた要素などの JAXB + フレーズを検索し、空白を描画しました。一部のクラスのカスタマイズはカスタム XMLAdapter を使用して実行できるようですが、私のシナリオは実際にはマーシャリング/アンマーシャリングとは関係なく、Java アプリケーションでのドメイン オブジェクトの操作に関連しています。