加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将XML绑定到Java类时处理不同的XSD版本

发布时间:2020-12-16 23:31:37 所属栏目:百科 来源:网络整理
导读:我希望能够向用户公开表示 XML文件的对象.这可以通过许多库(xmlBeans,JAXB …)完成,并且它一切都很好,直到我必须支持该XML文件的不同版本(演变模式问题)以实现向后兼容. 我希望这对我的用户完全透明,这意味着我的系统需要决定在某个特定时间点需要使用哪个版
我希望能够向用户公开表示 XML文件的对象.这可以通过许多库(xmlBeans,JAXB …)完成,并且它一切都很好,直到我必须支持该XML文件的不同版本(演变模式问题)以实现向后兼容.

我希望这对我的用户完全透明,这意味着我的系统需要决定在某个特定时间点需要使用哪个版本的XML文件.

这是我想要实现的简短伪代码:

public VersionIndependantObject getVersionSpecificXmlBindedObject() {
    //Determening XSD version and binding XML file to JAVA object
    return javaObject;
}

VersionIndependantObject – 这是当时在系统上找到的XML文件的对象表示(可能是v1,v2 ……).

有没有办法处理现有的XML库之一 – > Java对象绑定?

解决方法

XML Schema是向后兼容的

通常,XML模式会发展,以便它们向后兼容.这是通过仅添加可选的新属性和元素来完成的.这意味着旧的XML文档仍然对新模式有效.使用此策略时,您只需要针对新的XML模式重新生成模型.

XML Schema不向后兼容

如果模型不能向后兼容,那么事情就更复杂了.

生成模型

您可以为每个版本的XML模式生成模型.如果命名空间未更改,则需要覆盖默认包名称.

解组

而不是直接解组XML,您可以使用StAX解析器解析它.然后,您可以使用XMLStreamReader获取version属性并确定要使用的模型.然后将XMLStreamReader解组到该模型中.

UPDATE

I’ve already done that (the logic behind which model to use when
unmarshaling part is a bit different though). the problem is
transparency towards the user (return type). It’s not until runtime
that I know which model will be returned. How would you handle that?

您需要具有可以是任何生成的模型的泛型返回类型(即Object),或者像您的问题中那样具有特定于版本的方法,每个方法都返回其相应的生成模型.我将研究正在使用的模式演化策略.许多人试图向后友好(因为它也有助于他们的处理).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读