具有相同元素名称的两个XSD的JAXB Maven错误;无法解决绑定问题

时间:2017-08-17 13:57:49

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

我们使用jaxb2-maven-plugin 2.2从xsd文件生成Java类。我们有一个带有某个根元素名称的xsd,例如

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.example.com" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SOMENAME">
...

我们希望Java类有一些不同的名称,所以我们为它定义了一个xjb绑定

<jaxb:bindings schemaLocation="com/somepackage/xsd1.xsd">
    <jaxb:bindings node="//xsd:element[@name='SOMENAME']">
        <jaxb:class name="OtherName"/>
    </jaxb:bindings>
</jaxb:bindings>

使用@XmlRootElement(name =“SOMENAME”)生成OtherName.java就像我们预期的那样

然后我们收到了另一个具有相同根元素名称的xsd(同样也是targetNamespace),我们假设为那个定义另一个绑定将以相同的方式工作

<jaxb:bindings schemaLocation="com/otherpackage/xsd2.xsd">
    <jaxb:bindings node="//xsd:element[@name='SOMENAME']">
        <jaxb:class name="YetAnotherName"/>
    </jaxb:bindings>
</jaxb:bindings>

即。使用@XmlRootElement生成YetAnotherName.java(name =“SOMENAME”)

然而,这导致异常org.xml.sax.SAXParseException; ... 'SOMENAME' is already defined

(我们发现一些使用不同targetNamespace值的答案可能有所帮助,但我们最终需要将Java类编组为XML,在那里我们需要<SOMENAME xmlns="http://www.example.com"...标题)

0 个答案:

没有答案