Chameleon XSD导入的JAXB解决方法?

Gru*_*ber 8 java xml xsd jaxb

这是我的第一个问题,所以请温柔;)

我遇到了一个奇怪的问题.基本上我得到三个XSD定义,如下所示:

PartA.xsd
targetNameSpace="PartA"
include="PartB.xsd"

PartB.xsd
<!-- no namespace definition!!! -->

PartC.xsd
targetNameSpace="PartC"
inlude="PartB.xsd"
import="PartA.xsd"
Run Code Online (Sandbox Code Playgroud)

PartC通过JAXB 绑定到Java类时会弹出错误:

  • 具有相同名称"b.exampleType"的类/接口已在使用中.使用类自定义来解决此冲突.
  • 这种令人困惑的错误很可能是因为模式使用了一种称为"变色龙模式"的技术,这种技术会将单个定义多次加载到不同的名称空间中.有关此内容的更多信息,请参见http://forums.java.net/jive/thread.jspa?threadID=18631.

在链接之后,我发现,实际错误在于PartB,它没有命名空间声明!这种方法称为Chameleon Schema.PartB中定义的类型将采用导入XSD的名称空间.

所以在我的例子中,同一类型有两个名称空间:

  1. "A部"
  2. "C部分"

这就是JAXB崩溃的地方.我还没有找到一种方法来正确绑定PartC.而且(为了让事情变得棘手)我有机会改变原始的XSD定义!

有没有人遇到过这种现象之类的东西,并且有一个有效的解决方法呢?