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

标签 java xsd jaxb jaxb2 maven-jaxb2-plugin

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

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

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

所以我得到了错误

SAXParseException: 'ResponseTypeCodeEnumeration' is already defined

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

注意:我不拥有任何一个 XSD,因此在技术上不允许我更改它们。

最佳答案

您描述了一个无效的顶级模式(父),因为它在同一范围内拉入了恰好定义相同简单类型的两个(子)XSD。

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

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

如果您有不同的父 XSD,从同一个“子”模式池中提取,并且每个父 XSD 都有效,那么您可以使用 JAXB episodes只为通用模式生成一组类。每次为父 XSD 生成类时都会引用该剧集。

关于java - 当同一命名空间的两个 XSD 声明同一元素时,JAXB 如何解决 'is already defined' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180177/

相关文章:

java - 线程上的方法执行 - 未执行/在完成之前结束

xml - 如何在 xml 模式中为递归类型定义 Xpath 选择器

mongodb - 在 XML 数据库中实现 MongoDB 样式文档引用

java - 从 QName 获取 Java 类名

java - JAXB 2.0 验证不起作用

java - 如何在jsp中显示jasper报表

java - 如何使用开源工具检查 PDF-A 1b 合规性?

Java 递归和二叉树

xml - JAXB 2 注释和 XSD

java - 使用 JAXB 解码时将空元素转换为 null