如果用户更改了先前未编组的数据,我只想使用 JAXB 将数据编组到文件中。我知道 JAXB 生成的类没有equals()
方法。有没有简单的方法来确定解组后数据是否已更改?
例如,有用于此目的org.w3c.dom.Document
的isEqualNode()
方法。
如果用户更改了先前未编组的数据,我只想使用 JAXB 将数据编组到文件中。我知道 JAXB 生成的类没有equals()
方法。有没有简单的方法来确定解组后数据是否已更改?
例如,有用于此目的org.w3c.dom.Document
的isEqualNode()
方法。
因此,JAXB 不会生成类,它会从类的实例中编组数据或通过解组 xml 来填充实例。通常这些类是在 XJC 编译之前生成的。一种选择是更新类以包含 equals 方法。这不是一个好主意,因为您通常不想更新生成的代码,以防以后需要重新生成。因此,您可以编写一个实用程序类,该类接受两个类的实例并比较它们。
这是为了在解组后进行比较。另一种选择是在解组之前通过对文件进行校验和来执行检查。
最好的可能是实现比较器或实用程序类来检查相等性。例如,您可以依赖 commons-lang EqualsBuilder和CompareToBuilder。
一种相当标准的方法是将 a 添加transient boolean
到类中isDirty
,然后您的 setter 方法会将其设置为 true。(或者,如果您愿意,可以添加一个dateModified
)
显然,这需要更改您可能不合适的内部类代码。
您还可以保留Set
所有已修改的对象中的一些。但是,根据代码的组织方式,使这个逻辑正确也可能很棘手或不可能。
您可以使用 JAXB2 Basics Plug-in 在模型类中生成 equals 方法:
我决定编组到 org.w3c.dom.Document 并使用它的 isEqualNode() 方法。如果原始文档与新文档不同,那么我会编组到一个文件。因为我没有太多的 XML 数据,所以它对我有用。