0

私は現在、Maven JAXB プラグインに非常に複雑な Xml スキーマのセットのモデルを生成させることに取り組んでいます。すべてのスキーマが 1 つの Maven モジュールにあることから始めました。結果のモジュールは、その言語のドキュメントを解析できました。残念ながら、そのスキーマとモデルを別のモジュールにインポートする必要があったため、この 1 つのモジュールをいくつかのモジュールに分割する必要がありました。マルチスキーマ モジュールの場合、エピソード ファイルに問題があるようです。

たとえば、xml 形式の一般的な構造を定義し、基本的な型を定義する 1 つのスキーマがあります (それを A と呼びましょう)。現在、これらの基本型のサブタイプをそれぞれ実装する他のスキーマがいくつかあります (それらの 1 つを B と呼びましょう)。

B が A を拡張するようにモジュールを作成しました。残念ながら、ドキュメントを解析できなくなったようです。モジュール B で、A の ObjctFactory が作成され、B が A から拡張するすべての型の定義のみが含まれていることがわかります。他のすべての型はもう存在しません。

この ObjectFactory が存在する限り、ルート要素の定義が欠落しているため、何も解析できません。これを削除すると、B で定義されたすべての要素が結果のオブジェクト ツリーから失われます。

モジュール内の元の ObjectFactory をすべてのスキーマと比較すると、最初のバージョンには、どの要素が来る可能性があるかをパーサーに伝えるような「代替手段」が大量にあることがわかりました。分割バージョンではこれらが欠落しているため、B の部分的な ObjectFactory を削除すると、A の ObjectFactory が使用され、これは B の要素を認識しないと思います。

では、JAXB に A と B のすべての要素を解析させるにはどうすればよいでしょうか。ObjectFactory を拡張する方法はありますか? はいの場合、これはどのように行われますか?

次に問題を引き起こす可能性があるのは、A を拡張するスキーマがいくつかあるため、A、B、C、D、および E を含むドキュメントがあり、B、C、D、および E はすべて A を拡張しますが、それぞれにはまったく関係がないことです。他の。その場合、延長はオプションではないと思います。

4

1 に答える 1

0

OGC Schemas and Tools Project を行っているときに、この状況に何度も遭遇しました。このプロジェクトには、相互に使用する多数のスキーマがあります。

ここにあなたのためのいくつかのヒントがあります:

  • 個々のスキーマを個々の Maven モジュールに分割します。1 つのスキーマ - 1 つの jar。
  • エピソード ファイルを生成します。
  • これらのエピソードと個別のスキーマ コンパイルを使用して、インポートされたスキーマのクラスを生成しないようにします。
  • それでも、XJC は、インポートされたスキーマのあちこちに何かを生成します - たとえエピソード ファイルが何も必要ないと言っているとしても。ほとんどの場合、これらのものは削除できます。Ant プラグインを使用して、ビルド中にこれらのファイルを削除していました。
  • ランタイムでは、必要なすべての JAR を含めて、コンテキスト パスの JAXB コンテキストを構築するだけです。com.acme.foo:com.acme.bar

私が言及したOGCプロジェクトをチェックしたいかもしれません。このプロジェクトには、相互に関連する膨大な数のスキーマがあり、異なるバージョンが共存しています。

于 2014-03-19T20:31:59.490 に答える