gpt4 book ai didi

java - 将 XML 绑定(bind)到 Java 类时处理不同的 XSD 版本

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:30 25 4
gpt4 key购买 nike

我希望能够向我的用户公开表示 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 对象绑定(bind)库之一?

最佳答案

XML 模式向后兼容

XML 模式通常会演进以便向后兼容。这是通过仅添加可选的新属性和元素来完成的。这意味着旧的 XML 文档对新模式仍然有效。使用此策略时,您只需根据新的 XML 架构重新生成模型。

XML 模式不向后兼容

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

生成模型

您可以为每个版本的 XML 模式生成一个模型。如果命名空间没有改变,您将需要覆盖默认包名称。

解码

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


更新

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),或者像您的问题一样具有特定于版本的方法,每个方法都返回其相应的生成模型。我将调查正在使用的模式演变策略。许多人试图向后友好(因为这也有助于他们的处理)。

关于java - 将 XML 绑定(bind)到 Java 类时处理不同的 XSD 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com