我正在使用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>
通过生成的一对get&amp; amp;来访问内部类。在父Job
类中设置方法,再次如预期的那样:
public Job.PreProcessing getPreProcessing() {
return preProcessing;
}
public void setPreProcessing(Job.PreProcessing value) {
this.preProcessing = value;
}
我希望能够确保在Java代码中,PreProcessing
类的实例始终存在Job
类的实例。为此,我希望能够将JAXB生成自定义为
1)在PreProcessing
类构造函数中实例化Job
实例
2)在调用getter方法时懒惰地实例化PreProcessing
实例(如列表所示,这很好)
setter方法是多余的(事实上,不应该调用,因为PreProcessing
实例是最终的)。
我已经用Google搜索了JAXB +短语,例如延迟实例化,默认值,嵌套元素,并且到目前为止已经绘制了空白。这似乎有些类的定制可以使用自定义XMLAdapters进行,但我的情况是不是真的涉及到编组/解组,它涉及到在我的Java应用程序域对象的操作。