当同一命名空间的两个 XSD 声明同一元素时,JAXB 如何解决 'is already defined' 错误

JAXB how to resolve 'is already defined' error when two XSD's of same namespace declare the same element

所以我有以下 bindings.xjb 来加载顶级 XSD,它加载两个子 XSD(两个子具有相同的命名空间)。

<jxb:bindings schemaLocation="TopLevel.xsd">
</jxb:bindings>

现在两个子 XSD(我们称它们为 childA 和 childB)都声明相同的简单类型 ('ResponseTypeCodeEnumeration')。

所以我得到了错误

SAXParseException: 'ResponseTypeCodeEnumeration' is already defined

通常我会使用绑定条目来解决冲突。我不知道如何具体引用其中一个子 xsd 中的元素,或者我将如何设置它来解决此问题。

注意:我也不拥有任何一个 XSD,所以技术上不允许我更改它们。

您描述的顶级架构 (parent) 无效,因为它在同一范围内拉入两个 (child) XSD,而这两个 (child) XSD 碰巧定义了相同的简单类型。

如果是这种情况,那么不修复 XSD 就无法解决问题。

如果还向您提供了 parent 架构,则将其推回给提供商进行修复。否则,如果是您自己做的,您别无选择,只能重构 child XSD 以适应您的场景。无效的 (parent) XSD 无论如何都没有用(您将无法验证 XML,等等)

如果您有不同的 parent XSD,那是从同一个 "child" 模式池中提取的,并且每个 parent XSD 都是有效的,那么您可以使用 JAXB episodes 只为通用模式生成一组 类。每次为 parent XSD.

生成 类 时都会引用该剧集