Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将XSD文件转换为Java类_Java_Xml_Xsd_Xjc_Ota - Fatal编程技术网

Java:将XSD文件转换为Java类

Java:将XSD文件转换为Java类,java,xml,xsd,xjc,ota,Java,Xml,Xsd,Xjc,Ota,我目前正在使用xjc转换java类中的xsd文件。我的应用程序基于ota opentravel()标准,因此我下载了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 e

我目前正在使用xjc转换java类中的xsd文件。我的应用程序基于ota opentravel()标准,因此我下载了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_旅行依赖项,我已经生成了所有内容,但它们支持的最新版本是ota_v2014,我还需要ota_v2015和ota_v2016版本


我用来在java类中转换这些.xsd文件的命令是:sudo xjc-d src/destination/folder1/source/OTA_HotelResModifyNotifRQ.xsd我在搜索并找到以下解决方案:

<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\u HotelResModifyNotifRQ.xsd

我个人的建议是不要尝试使用像OTA这样大而复杂的模式进行Java数据绑定。你只需要得到一个难以管理的类数。是的,我明白,但我需要它。否则,若我们不能将ota xsd文件转换成java类,我就不知道它们的用途是什么?我正在搜索我在下面添加的解决方案。XSD的主要目的是精确地指定什么是允许的,什么是不允许的。在操作上,主要目的是验证文档实例。另一个用途是用XQuery或XSLT编写支持模式的程序。@MichaelKay感谢您的回答和解释。