当两个相同名称空间的XSD声明相同的元素时,JAXB如何解决'已定义'错误

时间:2015-12-09 13:37:02

标签: java xsd jaxb jaxb2 maven-jaxb2-plugin

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

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

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

所以我收到了错误

SAXParseException: 'ResponseTypeCodeEnumeration' is already defined

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

注意:我没有XSD,所以我在技术上不允许更改它们。

1 个答案:

答案 0 :(得分:3)

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

如果是这种情况,在没有修复XSD的情况下,您无法解决问题。

如果还提供了父架构,则将其推回到提供程序以进行修复。否则,如果它是你自己的,你别无选择,只能重构儿童XSD以适应你的场景。无效(父)XSD无论如何都是无用的(你将无法验证XML等)。

如果你有不同的父XSD,它来自同一个“子”模式池,并且每个父XSD都有效,那么你可以使用JAXB episodes只为公共模式生成一组类。每次为父XSD生成类时都会引用该剧集。