我使用java-object-diff來獲取由JAXB從xml解析的兩個對象之間的差異。在下面的示例中,我使用相同的字符串來測試是否獲得任何差異,但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始終不變,稱它已經從null
改爲<the actual value>
這裏面有每財產。例如。
content changed from null to Mit dem Wasserinonisator
我已經驗證了這兩種Items
有兩個actualy相同的內容,沒有不null
,但完全相同的內容。
Item
是一個有很多子類(所有獲取者和設置者都存在)的pojo,例如,
public class Item {
@XmlElement(name = "ASIN", required = true)
protected String asin;
@XmlElement(name = "ParentASIN")
protected String parentASIN;
@XmlElement(name = "Errors")
protected Errors errors;
@XmlElement(name = "DetailPageURL")
protected String detailPageURL;
@XmlElement(name = "ItemLinks")
protected ItemLinks itemLinks;
@XmlElement(name = "SalesRank")
protected String salesRank;
@XmlElement(name = "SmallImage")
protected Image smallImage;
}
有什麼辦法讓java-object-diff工作,讓它正確比較值嗎?
顯然'node.canonicalGet(base)'返回'null'。那麼'DiffNode'和'ObjectDifferBuilder'的實現是什麼? –
我試圖用你的代碼重現你的問題,但我看到了不同的行爲。當我運行該程序時,diff5.hasChanges()爲false。請仔細檢查您在運行時向我們顯示源代碼。 –
Ja,das ist auf jeden Fall genau der Code den ich benutze。爲了達到這個目的,你需要知道的是, @TobiasOtto – Michael