适用于Chameleon 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"

当通过JAXB将PartC绑定到Java类时,弹出错误消息:

  • 具有相同名称“b.exampleType”的类/接口已被使用。 使用类定制来解决此冲突。
  • 这个令人困惑的错误最有可能是因为模式使用了一种名为“chameleon schema”的技术,这种技术会导致单个定义被多次加载到不同的名称空间中。 有关更多信息,请参阅http://forums.java.net/jive/thread.jspa?threadID=18631。
  • 在链接之后,我发现,实际的错误在于PartB,它没有命名空间声明! 这种方法叫做Chameleon Schema 。 PartB中定义的类型将采用导入XSD的名称空间。

    所以在我的情况下,有两个相同类型的命名空间:

  • “A部”
  • “C部分”
  • 这就是JAXB发生故障的地方。 我还没有找到正确绑定PartC的方法。 和(使事情棘手)我有机会改变原来的XSD定义!

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


    我正在使用wsdl2java面临同样的问题:

    WSDLToJava错误:由JAXB抛出:具有相同名称的类/接口“Respuesta”已在使用中。 使用类定制来解决此冲突。

    但这个问题指出了我的正确方向。 使用CFX中的wsdl2java,您可以使用binding.xml文件定制元素如何绑定到类。 例如:

    /Applications/apache-cxf-2.7.13/bin/wsdl2java -b ./src/main/resources/binding.xml -V -d src/main/java -compile -classdir target/classes  http://someurl.wsdl
    

    关键是要在binding.xml中解释,以便为特定的className命名某个xsd元素以避免colissions:

    <jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
    
      <jxb:bindings schemaLocation="./someXsdFile.xsd">
        <!-- Rename the respuesta class to resolve a naming conflict with other Respuesta element already defined-->
        <jxb:bindings node="//xs:element[@name='respuesta']/xs:complexType">
          <jxb:class name="Respuesta2" />
        </jxb:bindings>
      </jxb:bindings>
    </jxb:bindings>
    

    希望这对使用wsdl2java的这个问题的下一个人有帮助。 我认为其他工具应该允许类似的问题。


    以下是可用的,虽然它没有提供很多细节:

  • https://jaxb.dev.java.net/guide/How_modularization_of_schema_interacts_with_XJC.html

  • 我遇到了同样的问题,谷歌搜索将我带到了这里。 你的问题已经足够详细了,我能够找到答案,我所做的就是将命名空间放在PartB.xsd中,并使用XJC生成Java类。 我添加了以下内容:

    xmlns:ns =“http://www.myCompany.com/2009/01/CustSchema”targetNamespace =“http://www.myCompany.com/2009/01/CustSchema”

    链接地址: http://www.djcxy.com/p/48509.html

    上一篇: JAXB workaround for Chameleon XSD imports?

    下一篇: Sort By Soundex (or similar) `Closeness`