使用JAXB在不同模式版本之间迁移对象

时间:2013-12-10 13:08:01

标签: java jaxb xml-serialization migration xsd

我们正在使用JAXB在JCR中存储序列化对象。 XML文件使用版本化模式。显然,对象的类最终会发生变化,因此我们将拥有更新的模式版本。

我们如何自动将旧存储对象迁移到新版本? JAXB在那里提供任何支持还是wrong soultion?目前我们正在使用XSLT脚本来转换XML文件,但如果我们能够自动从旧的序列化对象创建新的对象版本,那当然会更好。

对象的预期更改可以是一切:成员的添加或删除,成员的重命名以及成员的类型更改。

1 个答案:

答案 0 :(得分:1)

诀窍是使新的模式版本向后兼容以前的模式。 (请注意,这意味着您的模式将始终变大。)

要消除旧模式中有效的新模式中的元素或属性,可以在新模式中使用它是可选的(对于元素,minOccurs =“0”,对于属性,使用=“optional”。)这将允许在旧模式下编组的数据在新模式下被解组为有效;然后,您可以在删除有问题的元素后,在新架构下将数据封存回来。

要将元素添加到不在旧模式中的新模式,您可以遵循相同的逻辑:在新模式中将其设置为可选(允许将旧数据解组为有效);然后,您可以在将其重新组合之前添加新元素或属性。