2017-04-03 9 views
0

現在、xjcを使用してxsdファイルをJavaクラスに変換しています。私のアプリはota-opentravel(http://www.opentravel.org/)標準に基づいているので、ota-2016b版のxsdファイルをダウンロードし、javaクラスのすべてのxsdファイルを変換しようとしました。私は、それらのいずれかをこの問題を解決する方法の例の多くは.xjbファイルを指定して、私は問題を持っているの.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 

:私は、次のエラーを得ました。 これは、.xsdファイルの数が少ない人にとっては良いアプローチですが、私にとっては300を超える.xsdファイルを変換する必要がありますが、不可能と思われます。

私はすでにすべてが生成されているが、それらがサポートしている最新バージョンはota_v2014であり、バージョンota_v2015とota_v2016が必要なmaven ota_travel依存関係も見つかりました。

私はJavaクラスでこれらの.xsdファイルを変換するために使用されるコマンドは次のとおりです。sudoの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クラスを正常に生成します。 otaバージョンのいくつかについては、ota2008bバージョンのようなこのバインディングファイルは必要ありません。私達はちょうど私たちのバインディングファイルですパスを追加する必要が前のコマンドを実行するために

sudoのXJC -b /bindings.xjb -dのsrc /先/ folder1の/ソース/ OTA_HotelResModifyNotifRQ.xsd

関連する問題