2017-04-03 155 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