如何确定以前用JAXB解组的数据是否已更改?

时间:2012-08-06 15:28:52

标签: java jaxb marshalling unmarshalling

如果用户更改了以前未编组的数据,我只想将JAXB的数据编组到文件中。我知道JAXB生成的类没有equals()方法。是否有任何简单的方法来确定解组后数据是否已更改?

E.g。 org.w3c.dom.Document为此目的采用isEqualNode()方法。

5 个答案:

答案 0 :(得分:0)

因此,JAXB不生成类,它通过解组xml来对类实例中的数据进行编组或填充实例。通常,这些类是在编译时由XJC生成的。一种选择是更新类以包含equals方法。这不是一个好主意,因为您通常不希望更新生成的代码,以防您需要在以后重新生成。所以你可以编写一个实用程序类,它接受两个类的实例并进行比较。

这是用于解组后的比较。另一个选择是通过对文件执行校验和来在解组之前执行检查。

答案 1 :(得分:0)

最好的方法是实现Comparator或实用程序类来检查相等性。 例如,您可以依赖commons-lang EqualsBuilderCompareToBuilder

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

您可以使用JAXB2 Basics插件将等效方法生成到模型类中:

答案 4 :(得分:0)

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