我正在使用 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;
}
我希望能够确保在 Java 代码中,总是有PreProcessing
一个Job
. 为此,我希望能够将 JAXB 生成自定义为:
1)PreProcessing
在Job
类构造函数中实例化一个实例 2)在调用 getter 方法时延迟实例化一个PreProcessing
实例(就像列表一样,这很好)
setter 方法将是多余的(实际上不应该调用,因为该PreProcessing
实例是最终的)。
到目前为止,我已经搜索了 JAXB + 短语,例如惰性实例化、默认值、嵌套元素并绘制了一个空白。似乎可以使用自定义 XMLAdapters 执行某些类自定义,但我的场景与编组/解组并不真正相关,它与我的 Java 应用程序中域对象的操作有关。