面向XML的对象,向后和向前兼容

短暂的 :

我在一个应用程序中工作,我们需要将对象保存为XML格式,并在以后需要时加载它们。为此,我使用JAXB将XML编组和解编回Java类。

我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),结果,我将拥有不兼容的保存XML,无法将其绑定回新的类形式。

为了解决这个问题,每次必须进行更改时,我都会在一个新程序包(以其版本命名)下复制所有类的副本,并应用所请求的更改。并且在保存XML时,我保存了它的版本,以便可以决定JAXB应该扫描哪个包来解组该XML。

我的问题是,还有其他方法可以使用JAXB实现向后和向前兼容性吗?是否没有其他技术可以支持这一点?

bdoughan:

注意:我是JAXB 2(JSR-222)专家组的成员,并领导EclipseLink JAXB(MOXy)

对于此用例,我更喜欢在可能的情况下使用单个模型。这将需要您的对象模型具有多个映射。JAXB规范没有提供执行此操作的方法,但是可以使用MOXy的外部化元数据扩展来完成:

元数据可用于补充注释或用于替换它们。因此,我建议您将基础架构与注释映射,并使用XML格式来修改架构每个版本的元数据。

我的问题是,我必须在某个时候更改Java模型(通过添加,重命名或删除属性),结果,我将拥有不兼容的保存XML,无法将其绑定回新的类形式。

删除Java属性(字段/属性)会使事情变得很困难,因为旧的XML不会映射到任何东西。相反,您可以将它们保留在模型中,并在XML元数据文件中将其标记为“ @XmlTransient”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章