我希望这对我的用户完全透明,这意味着我的系统需要决定在某个特定时间点需要使用哪个版本的XML文件.
这是我想要实现的简短伪代码:
public VersionIndependantObject getVersionSpecificXmlBindedobject() { //Determening XSD version and binding XML file to JAVA object return javaObject; }
VersionIndependantObject – 这是当时在系统上找到的XML文件的对象表示(可能是v1,v2 ……).
有没有办法处理现有的XML库之一 – > Java对象绑定?
解决方法
通常,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),或者像您的问题中那样具有特定于版本的方法,每个方法都返回其相应的生成模型.我将研究正在使用的模式演化策略.许多人试图向后友好(因为它也有助于他们的处理).