esp*_*per 5 java xml data-binding xsd jaxb
我希望能够向用户公开表示XML文件的对象.这可以通过许多库(xmlBeans,JAXB ...)完成,并且它一切都很好,直到我必须支持该XML文件的不同版本(演变模式问题)以实现向后兼容.
我希望这对我的用户完全透明,这意味着我的系统需要决定在某个特定时间点需要使用哪个版本的XML文件.
这是我想要实现的简短伪代码:
public VersionIndependantObject getVersionSpecificXmlBindedObject() {
//Determening XSD version and binding XML file to JAVA object
return javaObject;
}
Run Code Online (Sandbox Code Playgroud)
VersionIndependantObject - 这是当时在系统上找到的XML文件的对象表示(可能是v1,v2 ......).
有没有办法处理一个已经存在的XML库 - > Java Object绑定?
通常,XML 模式会不断发展,以便向后兼容。这是通过仅添加可选的新属性和元素来完成的。这意味着旧的 XML 文档对于新架构仍然有效。使用此策略时,您只需根据新的 XML 模式重新生成模型即可。
如果模型不向后兼容,那么事情就会变得更加复杂。
生成模型
您可以为每个版本的 XML 模式生成一个模型。如果命名空间没有更改,您将需要覆盖默认的包名称。
解组
您可以使用 StAX 解析器对其进行解析,而不是直接解组 XML。然后您可以使用 来XMLStreamReader获取版本属性并确定要使用的型号。然后将其解组XMLStreamReader到该模型中。
我已经这样做了(尽管解组部分时使用哪个模型背后的逻辑有点不同)。问题是对用户的透明度(返回类型)。直到运行时我才知道将返回哪个模型。你会怎么处理?
您要么需要有一个Object可以是任何生成模型的通用返回类型(即 ),要么像您的问题中那样具有版本特定的方法,每个方法都返回相应的生成模型。我会调查正在使用什么模式演化策略。许多人试图向后友好(因为这也有助于他们的处理)。
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |