微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我希望能够向用户公开表示 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),或者像您的问题中那样具有特定于版本的方法,每个方法都返回其相应的生成模型.我将研究正在使用的模式演化策略.许多人试图向后友好(因为它也有助于他们的处理).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。