繁体   English   中英

如何确定以前未使用JAXB编组的数据已更改?

[英]How to determine that data previously unmarshalled with JAXB was changed?

我只想与马歇尔JAXB到一个文件中的数据,如果先前已解组数据已被用户更改。 我知道JAXB生成的类没有equals()方法。 有没有简单的方法可以确定解组后数据是否已更改?

例如org.w3c.dom.Document isEqualNode()具有isEqualNode()方法。

因此,JAXB不会产生类,它会从类的实例中整理数据,也不会通过解组xml来填充实例。 通常,类是在XJC编译之前生成的。 一种选择是更新类以包括equals方法。 这不是一个好主意,因为您通常不想更新生成的代码,以防日后需要重新生成。 因此,您可以编写一个实用程序类,该类接受两个类的实例并进行比较。

这是为了在解组后进行比较。 另一种选择是在解组之前通过对文件进行校验和来执行检查。

最好的办法是实现Comparator或Utility类以检查是否相等。 例如,您可以依赖commons-lang EqualsBuilderCompareToBuilder

一种相当标准的方法是向类isDirty添加一个transient boolean ,您的setter方法会将其设置为true。 (或者,如果您愿意,可以添加一个dateModified

显然,这需要更改您的内部类代码,这可能是不合适的。

您还可以保留所有已修改对象的Set 但是,根据代码的组织方式,使此逻辑正确可能也是棘手的或不可能的。

您可以使用JAXB2 Basics插件在模型类中生成equals方法:

我决定编组到org.w3c.dom.Document并使用其isEqualNode()方法。 如果原始文档与新文档不同,那么我将封送一个文件。 由于我没有太多的XML数据,因此对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM