我正在使用java-object-diff来获取JAXB从xml解析的两个对象之间的差异。在下面的示例中,我使用相同的字符串来测试我是否没有差异,但是log.info("has changes: " + diff5.hasChanges());
记录true
。
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>
这种情况发生在每个属性中。 E.g。
content changed from null to Mit dem Wasserinonisator
我已经确认两个Items
具有相同的内容,并且两者都不是null
,而是完全相同的内容。
Item
是一个有许多子类的pojo(所有的getter和setter都存在),例如。
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工作,让它正确地比较值?