私はjava-object-diffを使用して、JAXBによってXMLから解析された2つのオブジェクトの違いを取得しています。以下の例では、同じ文字列を使用して違いがないかどうかを確認していますが、log.info("has changes: " + diff5.hasChanges());
ログtrue
です。オブジェクトが異なるhasChanges変更が検出されない
JAXBContext context1 = JAXBContext.newInstance(Item.class);
Unmarshaller m1 = context1.createUnmarshaller();
Item base = (Item) m1.unmarshal(new StringReader(s));
Item working = (Item) m1.unmarshal(new StringReader(s));
DiffNode diff5 = ObjectDifferBuilder
.buildDefault()
.compare(working, base);
log.info("has changes: " + diff5.hasChanges());
diff5.visit((node, visit) -> {
final Object baseValue = node.canonicalGet(base);
final Object workingValue = node.canonicalGet(working);
final String message = node.getPath() + " changed from " +
baseValue + " to " + workingValue;
System.out.println(message);
});
私がするSystem.out.printlnから取得したメッセージは、これはすべてのプロパティのために起こることが<the actual value>
にnull
から変更されていると言って、常に同じです。例えば。
content changed from null to Mit dem Wasserinonisator
私は両方Items
は、両方のactualyの同じ内容と全くを持っていることを確認したがnull
が、まったく同じ内容ではありません。
Item
は多くのサブクラス(すべてのゲッターとセッターが存在する)であるpojoです。
java-object-diffを作成して値を正しく比較する方法はありますか?
明らかに、 'node.canonicalGet(base)'は 'null'を返します。だから、 'DiffNode'と' ObjectDifferBuilder'の実装は何ですか? –
コードで問題を再現しようとしましたが、別の動作が発生します。プログラムを実行すると、diff5.hasChanges()はfalseです。ソースコードを実行する際にソースコードを表示していることを再度確認してください。 –
Ja、das ist auf jedenフォール・ジェネアップ・コード・デン・ベン・ベンツ。 Bringtのエスケープは、郵便配達と郵便配達を完了しましたか? @TobiasOtto – Michael