当前位置: 首页 > 面试题库 >

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

尉迟雅昶
2023-03-14
问题内容

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

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

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

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


问题答案:

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

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

  • http://bdoughan.blogspot.com/2010/12/extending-jaxb-representing-annotations.html

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

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

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



 类似资料:
  • Google正在弃用Google Cloud消息传递,转而采用Firebase Cloud消息传递: Firebase云消息传递(FCM)是GCM的新版本。它继承了可靠和可扩展的GCM架构体系,加上新功能!查看常见问题解答了解更多信息。如果要在新应用中集成消息,请从FCM开始。强烈建议GCM用户升级到FCM,以便在今天和将来受益于新的FCM功能。 根据我在服务器上进行的一些测试,FCM URL(h

  • 本文向大家介绍面向对象和面向过程的区别相关面试题,主要包含被问及面向对象和面向过程的区别时的应答技巧和注意事项,需要的朋友参考一下 面向过程:面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。 面向对象:面向对象易维护

  • 面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 提到面向对象,自然会想到面向过程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用就可以了。面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象,

  • 面向对象 程序设计方法 程序设计描述系统如何通过程序来实现的过程,其为一种设计方法与语言实现无关。常见的设计方法有面向流程与面向对象。 面向过程 以程序的过程为中心,采用自定而下逐步细化的方法来实现。常见的面向过程语言有 C、Fortran、Pascall。 面向对象 将对象作为程序的基本单元,将程序分解为数据和操作的集合。常见的面向过程语言有 smalltalk(也是 Objective-C 的

  • 面向对象 三大特性是:封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防

  • 之前的文章都是使用Sublime Text来编写 Python 的,主要是为了更好的熟悉和了解 Python ,可是开发效率不高,也不方便,从这章开始,改为使用 Pycharm 了,在之前的篇节集成开发环境(IDE): PyCharm中介绍了 PyCharm ,如果如要激活软件可以通过授权服务器来激活,具体看这个网址。JetBrains激活(http://www.imsxm.com/jetbrai