对象到XML,向后和向前兼容性

Tra*_*ent 8 java compatibility jaxb backwards-compatibility

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

我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),因此,我将拥有不兼容的已保存的XML,这些XML无法绑定回新的类表单.

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

我的问题是,有没有其他方法可以使用JAXB实现向后和向前兼容性?如果没有,是否有任何其他技术可以支持这个?

bdo*_*han 5

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

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

元数据可用于补充注释,或用于替换它们.因此,我建议使用注释映射基本模式,并使用XML格式修改每个模式版本的元数据.

我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),因此,我将拥有无法保存的XML,这些XML无法绑定到新的类表单.

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