2017-04-03 183 views
0

我目前使用xjc在java类中转换我的xsd文件。我的应用程序基于ota-opentravel(http://www.opentravel.org/)标准,因此我下载了它们的ota-2016b版本的xsd文件,并试图转换Java类中的所有xsd文件。我得到了以下错误:Java:将XSD文件转换为Java类

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文件的人来说,这是一个很好的方法,但对于我来说,他必须转换超过三百个.xsd文件,这似乎是不可能的。

我还发现一些maven ota_travel依赖关系,我已经生成了一切,但它们支持的最新版本是ota_v2014,我还需要版本ota_v2015和ota_v2016。

,我用于这些xsd文件在Java类转换的命令是:须藤XJC -d SRC /目的地/ folder1中/源极/ OTA_HotelResModifyNotifRQ.xsd

+0

我个人建议不是尝试使用与OTA一样庞大而复杂的模式尝试Java数据绑定。你只是得到难以管理的课程数量。 –

+0

是的,我明白,但我需要它。否则,我不知道ota xsd文件的目的是什么,如果我们不能将它们转换成java类? 我在寻找我找到的解决方案,我在下面添加。 –

+0

XSD的主要目的是准确地指定允许的内容和不允许的内容。在操作上,主要目的是验证文档实例。另一个用途是在XQuery或XSLT中编写架构感知程序。 –

回答

0

我正在寻找并发现下列溶液:

<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类。对于某些版本,我们甚至不需要像ota2008b版本这样的绑定文件。

为了运行以前的命令,我们只是在那里是我们结合文件添加路径: 须藤XJC -b /bindings.xjb -d SRC /目的/文件夹1 /源/ OTA_HotelResModifyNotifRQ.xsd