2012-02-20 19 views
3

JAXBを使用してXMLスキーマからJavaファイルを生成しようとしています。スキーマのデータ型の1つは、約300個の可能な値を持つ文字列です。これは256以上であるため、xjcはデフォルトではこの型の列挙型を生成せず、代わりに文字列を使用します。私は、生成された列挙型を持つようにしたいので、私は、次の内容のbindings.xmlにを作成します。JAXB:bindings.xmlのglobalBindingsは無視されます

 
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"> 
    <globalBindings typesafeEnumMaxMembers="1000" /> 
</bindings>

これは、未知の理由で動作しません。 xjcは私に何か手がかりを与えません。最初は私はファイルが含まれていないと思ったので、チェックしました。私も意図的にglobalBindingsのような要素名をglobalBindingに誤植しようとしましたが、無効な要素についてxjcが苦情を言いました。これは明らかにxjcがバインディングファイルを読み込むことを意味します。

しかし、globalBindingsをxsdの中に置くと、完全に機能し、enumが生成されます。

 
<xs:schema ....> 
    <xs:annotation> 
    <xs:appinfo> 
     <jaxb:globalBindings typesafeEnumMaxMembers="1000" /> 
    </xs:appinfo> 
    </xs:annotation> 
... 
... 
</xs:schema > 

だから私の質問は、(XJCによって読み取られる)bingings.xmlに設定されたオプションは、コンパイルをカスタマイズするために使用されていませんどのように来るのですか?私はここで何を欠場するのですか?

ありがとうございました。

答えて

0

あなたは私はあなたがこのようなあなたのタグの前にJAXBアノテーションを追加しなければならないと思いXJBファイルをいない使用する必要があるとxml 1

+0

あなたの答えは、いくつかの参考文献および/または例を追加することによって非常に強化される可能性があります。 – mathielo

0

<jaxb:bindings 
     xmlns:jaxb="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" 
     jaxb:extensionBindingPrefixes="xjc" 
     jaxb:version="1.0"> 
     <jaxb:globalBindings typesafeEnumMaxMembers="2000"> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
+0

ええと、なぜですか? "xmlns = ..."と "xmlns:jaxb = ..."を使用することの違いは、グローバルなバインディングを真にグローバルにする点です。 – NestorDRod

3

私は、現在のディレクトリの長さと認識xjcはバインド設定を無視します。

xjc -extension src/main/resources/schema/schema.xsd -b src/main/resources/schema/bindings.xjb -d target/tmp 

だから、短いプロジェクトのディレクトリは、それがする可能性が高い成功です:

プロジェクトのベースディレクトリに応じて、(バインディングに関連する)は、次のコマンドが失敗するか成功実行

FAILS: C:/anydir/tstaaaaaaaaaaaaaaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaaaaaaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaa/asubdirectory/_this_is_any_project_directory_ 
WORKS: C:/anydir/tsta/asubdirectory/_this_is_any_project_directory_ 
WORKS: C:/anydir/tst/asubdirectory/_this_is_any_project_directory_ 

同じ環境(Windows、同じJDK、同じプロジェクトソース)で作業している私の同僚は、このような厳密な長さ制限はありません。 だから私はその制限を引き起こす原因が何もない。しかし、私は私のために働いたルートディレクトリの近くに私のプロジェクトソースを配置した後。

+0

私のために同じ!私は問題をトラブルシューティングする日以上を過ごしました!それは答えとして受け入れられるべきです – Dennis

0

私はAchim Trommの応答を確認します。現在のベースディレクトリの長さによって、xjcはバインド設定を無視します。フォルダパスを短くすると正常に構築されます。これはJAXBバグですか?

関連する問題