2011-07-22 1 views
5

MavenのJAXB 2.xのプラグインの使用を推奨。期待または私はとJAXBにと<a href="http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html">http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html)</a>(MavenのJAXBプラグインを使用するための最良のか期待されるアプローチが何であるか疑問に思っXMLスキーマへの新たなんだ

私が持っています私はスキーマを定義したシンプルなXMLドキュメントフォーマットです。私は主に準拠したXMLファイルをJavaに読み込むことに興味がありますが、XMLにはないPOJOに追加のプロパティを追加したいと思うでしょう。実行時に使用されます

デフォルトでは、プラグインは生成されたコードを$ {project.build.directory}/generated-sources/xjcに置きます。私がしたいと思うのは、生成されたコードを/ src/main/java/whateverを追加してコードを変更する追加のプロパティを追加します。スキーマを変更すると、新しく生成されたPOJOの変更を自分のものにマージします。

代わりに、生成されたソースを/ src/main/javaに直接配置し、自分のプロパティを追加するためにPOJOをサブクラス化するように指示しますが、マーシャル/アンマーシャリングがまだ可能かどうかはわかりません私の拡張クラスを使用するように作られました。

誰にどのアプローチがより正常であるか、それぞれの落とし穴が何であるかについてのガイダンスはありますか?

答えて

2

あなたの場所では、生成されたソースをそのまま残して、それ以上の設定なしで対応するjarをMavenで構築し、最初のものに依存する別のプロジェクトにカスタムコードを入れることができます。これにより、すべてが正しい順序で構築されます。

生成されたクラスから派生させるか、コード内でそれらのインスタンスを属性として使用するか、さらにはより良いローカル変数として使用するかはあなたの選択です。個人的に私は派生を避けるだろう。 JAXBはすべて、特定の形式でI/Oを実行するために使用する低レベルのマシンです。

最も重要なことは、生成されたソースを変更することを忘れることです。同じエフェクトを自動的に取得できるようになったときに、開発プロセスにエラーが発生しやすい手動ステップを導入する理由

+0

ありがとう、これは私の最初のスタックオーバーフローに関する質問です。私を導く実際の経験があると非常に便利です。生成されたファイルをサブクラス化し、それを動作させることができるかどうかを見ていきます。また、デフォルトでスキーマ属性を使用して、必要なフィールドを持つクラスを生成することもできます。生成されたソースをサブクラス化する必要があります。 – barnyr

1

(ニコラの答えへのわずかなバリエーションを提供するために)

スキーマはほとんど、それだけでJAXBコードを生成作成し、完全に独立したビルドを持ってしても意味があります変化しないことを瓶、バージョンそれを、とスティック場合それはあなたのリポジトリにあります。

次に、下流のコードでは、そのjarを依存関係として使用し、必要に応じて新しいフィールドを追加するためにJAXBコードをサブクラス化します。

私たちはスキーマがかなり静的であったため、ビルドを行うたびにJAXBをコンパイルする必要はないと感じていたので、このルートを実行しました。

最も重要なことは、生成されたソースを変更することを忘れてください。同じエフェクトを自動的に取得できるようになったときに、開発プロセスにエラーが発生しやすい手動ステップを導入する理由

絶対に。

+0

ありがとうRoy、私は世代を別々のプロジェクトとして実行する考えが好きです。スキーマは非常にゆっくりと変化することが予想されるため、適切かもしれません。 – barnyr

0

すでによく作られている点を詳述し、拡張するには...暗黙的な関係やJAXBコードに「ゲッタ」を入れたいJAXBを包むあなたが望むところであなたが望むものを正確に行うクラスの階層構造です。

IDEでサポートされている委任では、これはちょっと面倒なことですが、主なアプリケーションからは、簡単で気を散らす低レベルのコードがたくさんあります。

これのもう1つの利点は、JAXBとの戦いで、あなたが望むように正確に物事を生成できるようになることです。ラッパーはあなたの心配を大幅に軽減します。

関連する問題