0

以前にアンマーシャリングされたデータがユーザーによって変更された場合にのみ、JAXB を使用してデータをファイルにマーシャリングしたいと考えています。JAXB によって生成されたクラスにはメソッドがないことを知っていますequals()。アンマーシャリング後にデータが変更されたかどうかを判断する簡単な方法はありますか?

たとえば、この目的のためのメソッドがorg.w3c.dom.Documentあります。isEqualNode()

4

5 に答える 5

0

したがって、JAXBは、クラスのインスタンスからデータをマーシャリングしたり、xmlをアンマーシャリングしてインスタンスにデータを入力したりするクラスを生成しません。通常、クラスはコンパイル時の前にXJCによって生成されます。1つのオプションは、equalsメソッドを含むようにクラスを更新することです。後日再生成する必要がある場合に備えて、生成されたコードを更新したくないので、これは良い考えではありません。したがって、クラスの2つのインスタンスを取得し、それらを比較するユーティリティクラスを作成できます。

これは、アンマーシャリング後に比較するためのものです。別のオプションは、ファイルに対してチェックサムを実行することにより、マーシャリングを解除する前にチェックを実行することです。

于 2012-08-06T15:53:14.287 に答える
0

JAXB2 Basicsプラグインを使用して、モデルクラスにequalsメソッドを生成できます。

于 2012-08-06T23:10:48.290 に答える
0

org.w3c.dom.Document にマーシャリングし、その isEqualNode() メソッドを使用することにしました。元のドキュメントが新しいドキュメントと異なる場合は、ファイルにマーシャリングします。私はそれほど多くの XML データを持っていないので、うまくいきます。

于 2012-08-07T06:52:16.853 に答える
0

Comparator またはユーティリティ クラスを実装して等価性をチェックするのがおそらく最善の方法です。たとえば、commons-lang EqualsBuilderおよびCompareToBuilderに依存できます。

于 2012-08-06T16:04:48.773 に答える
0

かなり標準的なアプローチの 1 つはtransient boolean、クラスにを追加するisDirtyことです。セッター メソッドはそれを true に設定します。(または、必要に応じて を追加しますdateModified)

明らかに、これには不適切な内部クラス コードの変更が必要です。

Set変更されたすべてのオブジェクトの一部を保持することもできます。ただし、コードの編成方法によっては、このロジックを正しくすることが難しい場合や不可能な場合もあります。

于 2012-08-06T16:40:54.797 に答える