2017-12-19 21 views
0

深くネストされたxsd要素から列挙型を生成する際に問題があります。 mavenビルド中にコードを生成すると、列挙型はstring型になります。ここに例があります。深くネストされたxsd要素からenumを生成

<xs:element name="Car"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="CarModal"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Type"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="SomeValue"/> 
        <xs:enumeration value="AnotherValue"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
     </xs:sequence> 
     </xs:completType> 
    </xs:element> 
    </xs:sequence> 

上記の例から、我々は、列挙値名「タイプ」が含まれている車の要素の内部に別の20個の要素を持っているでしょう。 Jaxb:typesafeEnumClassに 'Type'をバインドするためのバインディングファイルがありますが、機能していません。文字列が列挙型として取得されています。私の縛りの例があります。

<jaxb:bindings schemaLocation="someLocation"> 
    <jaxb:bindings node="//xs:element[@name='Car']> 
     <jaxb:bindings node="//xs:element[@name='CarModal']"> 
     <jaxb:bindings node="xs:element[@name='Type']/xs:simpleType> 
      <jaxb:typesafeEnumClass name="Type"/> 
     </jaxb:bindings> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

任意の助けてくれてありがとうと私はXSD

答えて

0

を変更することはできませんが、私はあなたのバインディングが十分でも正確ですね。 //xs:element[@name='CarModal']と書くと、基本的には「CarModalの要素は自分のスキーマ内にある」と言います。次に、多くのType要素があるとし、xs:element[@name='Type']/xs:simpleTypeが十分正確ではないとします。

xs:complexType/xs:sequence/xs:element[@name='CarModal']/ 
xs:complexType/xs:sequence/xs:element[@name='Type']/xs:simpleType 

次のような、より正確な表現を試してみてください、あなたの結合は、不正な構文の一般的な印象になります。たとえば、この:

<jaxb:bindings node="xs:element[@name='Type']/xs:simpleType> 

は無効なXML(xs:simpleType"を逃す)です。したがって、バインディングがまったく考慮されていない場合もあります。そうしないと、コードの生成ではなくエラーが発生するはずです。バインディングがまったく適用されているかどうかを再度確認します。

関連する問題