适用于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类时,弹出错误消息:
在链接之后,我发现,实际的错误在于PartB,它没有命名空间声明! 这种方法叫做Chameleon Schema 。 PartB中定义的类型将采用导入XSD的名称空间。
所以在我的情况下,有两个相同类型的命名空间:
这就是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的这个问题的下一个人有帮助。 我认为其他工具应该允许类似的问题。
以下是可用的,虽然它没有提供很多细节:
我遇到了同样的问题,谷歌搜索将我带到了这里。 你的问题已经足够详细了,我能够找到答案,我所做的就是将命名空间放在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