2017-04-03 13 views
0

현재 Java 클래스에서 xsd 파일을 변환하는 데 xjc를 사용하고 있습니다. 내 응용 프로그램은 ota-opentravel (http://www.opentravel.org/) 표준을 기반으로하므로 ota-2016b 버전의 xsd 파일을 다운로드하고 모든 xsd 파일을 Java 클래스로 변환하려고 시도했습니다. 나는 다음과 같은 오류 있어요 :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 파일이 거의없는 사람은이 방법이 적합하지만 300 개 이상의 .xsd 파일을 변환해야하는 사람에게는 불가능한 것처럼 보입니다.

또한 모든 항목이 이미 생성되었지만 지원되는 최신 버전이 ota_v2014이고 버전 ota_v2015 및 ota_v2016이 필요한 일부 maven ota_travel 종속성을 발견했습니다.

나는 자바 클래스에서이 .XSD 파일을 변환하는 데 사용되는 명령은 다음과 같습니다 sudo는 xjc를 -d SRC/목적지/폴더 1/소스/OTA_HotelResModifyNotifRQ.xsd

+0

내 개인적인 충고는 OTA만큼 크고 복잡한 스키마로 Java 데이터 바인딩을 시도하지 않아야합니다. 관리 할 수없는 클래스 수만 확보하면됩니다. –

+0

네, 이해하지만 필요합니다. 그렇지 않으면 우리가 자바 클래스로 그들을 변환 할 수없는 경우 ota xsd 파일의 목적은 무엇인지 모르겠다? 아래에서 추가 한 솔루션을 찾았습니다. –

+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 버전과 같은 바인딩 파일을 필요로하지 않습니다. 우리는 우리의 바인딩 파일입니다 경로를 추가 할 필요가 이전 명령을 실행하기 위해

: sudo는 xjc를 -b /bindings.xjb -d SRC/목적지/폴더 1/소스/OTA_HotelResModifyNotifRQ.xsd