我们使用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"...
标题)