【问题标题】:forward compatibility in unmarshalling using JAXB使用 JAXB 解组的前向兼容性
【发布时间】:2013-12-17 19:31:39
【问题描述】:

我有不同版本的架构。我只是在未来的版本中添加额外的属性(不删除或不更改数据类型)。我想处理来自未来版本的数据。旧模式的解组工作正常,但是当我尝试使用旧 xsd 从更高版本解组 xml 时,它会失败。我想避免/忽略那个额外的属性。请提出一种方法来做到这一点。

【问题讨论】:

  • 我正在为解组设置架构。如果我在 xml 中包含“temp”作为额外属性,则会出现错误:cvc-complex-type.2.4.d:发现以元素“temp”开头的无效内容。此时不需要子元素

标签: java xml jaxb unmarshalling


【解决方案1】:

没有架构验证

不会有任何问题,因为所有额外的内容都会被忽略。

使用架构验证

保持向后兼容性

必须添加新元素/属性才能使它们存在。它必须存在(即minOccurs="0")。

保持前向兼容性

始终根据 XML 架构的当前版本进行验证。为此,必须始终在同一位置找到最新版本的 XML 架构。

【讨论】:

    【解决方案2】:

    较旧的架构 (xsd) 文件不包含在较新的架构文件中指定为允许的属性。当解组器尝试根据旧模式验证包含新模式指定的新属性的文档时,它会失败,因为旧模式不知道新属性。

    但是,documentation here(具体参见 4.2.1)指定解组器会简单地跳过无效内容,这听起来像是您想要的。我无法独立验证这一点,因为我没有尝试过。您使用的是当前版本的 JAXB 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多