2012-04-05 7 views
2

このスキーマを使用してmyEnum属性のEnumクラスを生成しないというXJCツールに問題があります。バインディング - JAXB:XJC属性のEnumクラスを生成しません。

<xs:element name="myClass"> 
<xs:complexType> 
    <xs:attribute name="myEnum" > 
      <xs:simpleType > 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="1"/> 
        <xs:enumeration value="C"/> 
        <xs:enumeration value="M"/> 
        <xs:enumeration value="S"/> 
       </xs:restriction> 
      </xs:simpleType> 
    </xs:attribute> 
</xs:complexType> 
</xs:element> 

が、それは私だけで使用している場合は、ここでこの

<xs:simpleType > 
<xs:restriction base="xs:string"> 
    <xs:maxLength value="1"/> 
    <xs:enumeration value="C"/> 
    <xs:enumeration value="M"/> 
    <xs:enumeration value="S"/> 
</xs:restriction> 
</xs:simpleType> 

は、外部結合ファイルの内容であることを生成します。

<?xml version="1.0" encoding="UTF-8" ?> 
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
    version="2.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    > 
<globalBindings typesafeEnumMemberName="generateName"> 

</globalBindings> 
</bindings> 

答えて

2

あなたはこの試みることができる:ちょうど小さなXSDファイルを定義しますその特定の型はグローバル型として宣言されます。例:

<xs:simpleType name="myEnumSimpleType"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="1"/> 
     <xs:enumeration value="C"/> 
     <xs:enumeration value="M"/> 
     <xs:enumeration value="S"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="myClass"> 
    <xs:complexType> 
     <xs:attribute name="myEnum" type="myEnumSimpleType"> 
    </xs:complexType> 
</xs:element> 

これはJAXBクラスを生成します(JAXBクラスを人工JAXBクラスと呼ぶ)。

次に、より大きなXSDでxjcを実行し、特定の要素に対してこのタイプを使用するように世代をカスタマイズすることができます。

この外部XSDからのJAXB生成が1回限りの操作である場合(たとえば、JAXB生成コードをSVN/Gitに入れた場合)、使用するコードのその部分を書き直すことができます代わりにあなたの「人工的な」JAXBタイプ。

あなたは試してみたいことがもう一つは、あなたのバインディングのカスタマイズ

<globalBindings typesafeEnumMemberName="generateName"> 

はグローバルなものであってもよいが、このタイプの上に正確にそれを爪にしようとする表現を使用しないことです。 JAXBは、たとえそれが同じになるとしても、それぞれの発生に対して新しいクラスを生成する可能性があります。

私はxpathが面倒なので、大きなXSDのローカルコピーで素早くテストし、名前空間で変更することができます。あなたの答えのための

<xs:element name="myClass"> 
    <xs:complexType> 
    <xs:attribute name="myEnum" > 
     <xs:simpleType > 
       <xs:annotation> 
        <xs:appinfo> 
         <jaxb:typesafeEnumClass/> 
        </xs:appinfo> 
       </xs:annotation>    <xs:restriction base="xs:string"> 
       <xs:maxLength value="1"/> 
       <xs:enumeration value="C"/> 
       <xs:enumeration value="M"/> 
       <xs:enumeration value="S"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 
</xs:element> 
+0

Thaankますが、問題は、私は1500本の以上のライン –

+0

で(既に存在している)XSDファイルで作業する必要があるが、あなたはXSDを変更することはできません言っている(したがって、探しているということですXJCのみのソリューション)?さもなければ、この場合にサイズの重要性を説明してください。また、特にJDKとJAXBのバージョン+の実装について、詳細な設定をすることをお勧めします。 –

+1

はいXSD(別のベンダーのXSD)を変更できません 私はJDK 6とJAXB 2.2を使用しています。xsdファイルから自動的にxmlファイル(ランダムデータが入っています)を生成しようとしています。ありがとうございました –

関連する問題