0

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

例如,有用于此目的org.w3c.dom.DocumentisEqualNode()方法。

4

5 回答 5

0

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

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

于 2012-08-06T15:53:14.287 回答
0

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

于 2012-08-06T16:04:48.773 回答
0

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

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

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

于 2012-08-06T16:40:54.797 回答
0

您可以使用 JAXB2 Basics Plug-in 在模型类中生成 equals 方法:

于 2012-08-06T23:10:48.290 回答
0

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

于 2012-08-07T06:52:16.853 回答