gpt4 book ai didi

java - 对象到 XML,向后和向前兼容

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:56 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

元数据可以用来补充注释,或者用来代替注释。因此,我建议使用注释映射基本模式,并使用 XML 格式修改每个模式版本的元数据。

My problem is that the I have to change Java models sometime (by adding, renaming or deleting attributes) , as a result, I will have incompatable saved XMLs which can’t be bound back to the new class form.

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

关于java - 对象到 XML,向后和向前兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5193561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com