JAXB:如何指定复杂类型由不同的 XSD 生成的绑定规则?

JAXB: how to specify that a binding rule that a complexType is generated by a different XSD?

我有几个综合性的 XSDs,其中包含相同成员的相同 complexType 定义。每个 XSD 都有自己的命名空间。因此,当我在 xsd 上 运行 xjc 时,我会在每个命名空间中生成相同的复杂类型 class。

这最终会变得极其混乱和难以处理。我想创建一个绑定,告诉 XJC 不要为其中一个 XSD 生成复杂类型,而是使用另一个 xsd.[=15= 已经生成的 class ]

我尝试了以下但没有成功:

   <jaxb:bindings schemaLocation="../xsd/sandboxlist.xsd">
        <jaxb:bindings node="/xsd:schema">
            <jaxb:schemaBindings>
                <jaxb:package name="com.domain.schema.model.v4_0.sandboxlist"/>
            </jaxb:schemaBindings>
        </jaxb:bindings>
        <jaxb:bindings node="//xsd:complexType[@name='SandboxType']">
            <jaxb:class name="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" />
        </jaxb:bindings>
    </jaxb:bindings>

我想告诉 XJC sandboxlist.xsd 中的 SandboxType 实际上应该是 class com.domain.schema.model.v4_0.sandboxinfo.SandboxType(来自不同的 XSD)。

正确的语法是什么?

您可以通过 jaxb:class/@ref 实现此目的:

<jaxb:class ref="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" />

但是,更好的是,use episodes。使用 -episode CLI 参数生成,然后将 JAR 添加到 xjc 命令行。