MyHeader
以下是所有三个XSD中的常见部分:
<xs:element name="MyHeader">
<xs:complexType>
<xs:attribute name="Username" type="xs:string" />
<xs:attribute name="Password" type="xs:string" />
</xs:complexType>
</xs:element>
错误讯息为[xjc] [ERROR] 'MyHeader' is already defined
然后我尝试使用外部绑定来解决问题,因为我真的希望MyHeader
可以是一个java类。
我的外部绑定就像
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
version="2.1">
<bindings schemaLocation="./a.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>
<bindings schemaLocation="./b.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>
<bindings schemaLocation="./c.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>
</bindings>
然后它抱怨xpath错误......
有人可以帮助我摆脱这个问题。感谢。
答案 0 :(得分:2)
您的绑定文件需要命名空间前缀xs:的定义。添加后,在三个xsd文件之一中重命名MyHeader。
但您无法在三个不同的XML架构文件中重命名三个冲突元素名称。
解决这个问题的一种方法是使用不同的命名空间:然后元素不会发生冲突。
从两个模式文件中删除此元素的定义是另一种选择。
显然,整个架构设计存在缺陷,应该使用一种方法重新考虑,其中常见类型或元素在一个文件中定义,其他文件包括此公共基本文件。