我们使用 JAXB 将序列化对象存储在 JCR 中。 XML 文件使用版本化架构。显然,对象的类最终会发生变化,因此我们将拥有更新的模式版本。
我们如何自动将旧的存储对象迁移到新版本? JAXB 是否提供任何支持,或者是 wrong soultion ?目前我们正在使用 XSLT 脚本来转换 XML 文件,但如果我们能够自动从旧的序列化对象创建新的对象版本,那当然会更好。
对对象的预期更改可以是一切:添加或删除成员、重命名成员以及成员类型更改。
最佳答案
诀窍是使新的架构版本与以前的架构向后兼容。 (请注意,这意味着您的架构将始终变得更大。)
要消除在旧模式中有效的新模式中的元素或属性,可以在新模式中将其使用设置为可选(元素为 minOccurs="0",属性为 use="Optional"。)这将允许在旧模式下编码的数据在新模式下取消编码为有效;然后,您可以在删除有问题的元素后,将数据整理回新架构下。
要将旧模式中不存在的元素添加到新模式中,请遵循相同的逻辑:在新模式中将其设置为可选(这允许将旧数据解码为有效);然后,您可以在将其编码(marshal)回之前添加新元素或属性。
关于java - 使用 JAXB 在不同架构版本之间迁移对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495430/