1

私は、XML ノードを JPA エンティティーに変換するタスクの前にいます。XML 内のオブジェクトは、エンティティによって表されるオブジェクトと似ていますが、まったく同じではありません。私の前に多くの変換コードがあるようです。

XML は Schema .xsd ファイルで定義されており、JAXB を使用してクラスを生成し、インスタンスを作成しています。上記の決定は、生成された型に触れないことです。それぞれのコンバーターを作成します。おそらくビジター パターンを使用しますが、まだわかりません。

私を悩ませているのは、誰かが .xsd ファイルを変更しようとして、責任のあるコンバーターを更新しないという状況です。

私の考えは、それらのコンバーター クラスが、コードで処理される適切な JAXB クラスからのフィールドの静的最終リストを維持するようにすることです。誰かが .xsd ファイルでそれらを変更した場合、一部のフィールドがまだ処理されていない、または一部の処理済みフィールドがもう存在しないという警告がログに記録されます。

さらに、コンバーターの数が JAXB 生成クラスの数と一致するようにしたいと考えています。どうやってするか?

おそらく、.xsd ファイルからどのクラスを生成できるかを実行時間で確認し、それらを登録済みのコンバーターと比較する必要があります。特定のパッケージ内のクラスをスキャンして JAXB 出力クラスを確認することはできないと感じています。

ビジターのパターンから何が問題なのかがわかるかもしれませんが、実際に XML-JPA 変換でエラーが発生するまでチェックを長引かせるのはおそらく得策ではありません。

4

1 に答える 1

0

私がこれを正しく理解できれば、エンティティに JAXB アノテーション、xsd ファイルも付けて、マッパー xml <-> エンティティを作成する必要がありますよね? または、xml とエンティティの間に DTO がありますか?

ビルド中に Java クラスから xsd ファイルを作成しようとすることができると思います。次に、xml -> JAXB マーシャラーを使用して行うことができる Java クラスの変換。また、変換の数が Java クラスの数と一致するかどうかを知る必要がある場合は、このための統合テストを作成します。たとえば、MyEntity、MyEntityMapper などの命名規則を保持する必要があります。次に、エンティティ (dtos?) を調べてマッパーを検索します。

しかし、私はあなたの問題を正しく理解していなかったかもしれません。詳細を教えてください。

于 2013-07-24T20:53:41.290 に答える