我目前正在使用xjc在java类中转换我的xsd文件。我的应用程序基于ota-opentravel(http://www.opentravel.org/)标准,因此我下载了ota-2016b版本的xsd文件,并尝试转换java类中的所有xsd文件。我收到以下错误:
Property "Value" is already defined.
Use <jaxb:property> to resolve this conflict.
The following location is relevant to the above error
line 5848 of file:/OTA_CommonTypes.xsd
line 1836 of file:/OTA_Lists.xsd
line 6820 of file:/OTA_CommonTypes.xsd
etc
我找到了很多如何解决这个问题的例子,其中一个是指定.xjb文件并为我有问题的.xsd文件添加一些额外的绑定。 对于拥有少量.xsd文件的人来说,这是一个很好的方法但对我来说,必须转换超过300个.xsd文件,这似乎是不可能的。
我还发现了一些maven ota_travel依赖项,其中我已经生成了所有内容,但是它们支持的最新版本是ota_v2014,我还需要版本ota_v2015和ota_v2016。
我用来在java类中转换这些.xsd文件的命令是: sudo xjc -d src / destination / folder1 / source / OTA_HotelResModifyNotifRQ.xsd
答案 0 :(得分:1)
我正在搜索并找到以下解决方案:
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:version="2.0">
<jxb:bindings schemaLocation="OpenTravel_2015B_XML/OTA_CommonTypes.xsd" node="/xs:schema">
<jxb:bindings node="//xs:element[@name='CalculationMethod']/xs:complexType/xs:sequence/xs:element[@name='Duration']/xs:complexType">
<jxb:bindings node=".//xs:attribute[@name='Value']">
<jxb:property name="ValueToFixError1"/>
</jxb:bindings>
</jxb:bindings>
<jxb:bindings node="//xs:element[@name='MaximumDuration']/xs:complexType">
<jxb:bindings node=".//xs:attribute[@name='Value']">
<jxb:property name="ValueToFixError2"/>
</jxb:bindings>
</jxb:bindings>
<jxb:bindings node="//xs:element[@name='StartAndEnd']/xs:complexType/xs:choice/xs:element[@name='Duration']/xs:complexType">
<jxb:bindings node=".//xs:attribute[@name='Value']">
<jxb:property name="ValueToFixError3"/>
</jxb:bindings>
</jxb:bindings>
<jxb:bindings node="//xs:complexType[@name='OntologyDistanceType']/xs:sequence/xs:element[@name='Distance']/xs:complexType">
<jxb:bindings node=".//xs:attribute[@name='Value']">
<jxb:property name="ValueToFixError4"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
使用此绑定文件,XJC将成功生成大多数ota版本的java类。对于某些ota版本,我们甚至不需要像ota2008b版本这样的绑定文件。
为了运行上一个命令,我们只需添加路径到哪里就是我们的绑定文件: sudo xjc -b /bindings.xjb -d src / destination / folder1 / source / OTA_HotelResModifyNotifRQ.xsd