更新 1: 3 つの最小限の XSD ファイルを使用してこの問題の絞り込みを作成し、問題自体 ( xjcの動作のランダム性ではなく)に焦点を当てた新しい質問をこの SO questionに投稿しました。
更新 2:ここに JAXB のバグトラッカーに関する問題レポートを投稿しました。
エピソードコンパイルを使用して、多数のxsdスキーマファイルを使用したセットアップで、xjcの最新の 2.2.7 JAXB RI実装を使用しています。ビルドにAntを使用しているので、すべてが再現可能ですよね? 違う!xjcコード生成が次のようなメッセージで失敗することが判明しました。
[xjc] [ERROR] compiler was unable to honor this schemaBinding customization. It is attached to a wrong place, or its inconsistent with other bindings.
[xjc] line 581 of file:/home/boohaha/unableToHonorSchemaBinding/CEABase.xsd.episode
[xjc]
[xjc] [ERROR] (the above customization is attached to the following location in the schema)
[xjc] line 9 of file:/home/boohaha/unableToHonorSchemaBinding/src/_int/esa/esavo/ivoa/jaxb/schemas/VOResource-v1.0.xsd
[xjc]
本当にぞっとするのは、xjc task( ant clean && ant
)の連続した Ant 呼び出しが異なる結果をもたらすことです。コンパイルは再び失敗し、同じターゲット ( jaxb-vo.ceaservice ) で失敗します。メッセージのタイプは同じです (尊重できません) が、メッセージの詳細は異なります(他のファイルの他の行について不平を言っています)。 )。少し実験したところ、(複数回の実行で) 4 つまたは 5 つの異なる場所があることがわかりました。すべての場合において、これはファイル内の最後のバインディングであり、xjc解析コードのバグを示唆しています。
しかし、セットアップのバグや間違いが何であれ、コード ジェネレーターがこのランダムな動作を示すとは考えられません。私は偏執症になり、インターネットに接続していない状態で、すべてを何度もテストしました。同じことで、ランダム性は持続しました (興味深いことに、いくつかの行は他の行よりもはるかに頻繁に表示されますが、それは常に最後のバインディングです)。ユースケースを取得して、自分で試すことができます:
git clone https://github.com/mperdikeas/unable_to_honor.git && cd unable_to_honor && ant
私の質問は次のとおりです。
- このエラーが発生する理由
xjc
速度を上げるために「賢い」スレッドを使用しない限り、コードジェネレーターがランダムに失敗する可能性はありますか
更新 投稿の上部にある更新メモを参照してください。