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;
}

我希望能够确保在 Java 代码中,总是有PreProcessing一个Job. 为此,我希望能够将 JAXB 生成自定义为:

1)PreProcessingJob类构造函数中实例化一个实例 2)在调用 getter 方法时延迟实例化一个PreProcessing实例(就像列表一样,这很好)

setter 方法将是多余的(实际上不应该调用,因为该PreProcessing实例是最终的)。

到目前为止,我已经搜索了 JAXB + 短语,例如惰性实例化、默认值、嵌套元素并绘制了一个空白。似乎可以使用自定义 XMLAdapters 执行某些类自定义,但我的场景与编组/解组并不真正相关,它与我的 Java 应用程序中域对象的操作有关。

4

0 回答 0