【发布时间】:2014-08-29 02:21:22
【问题描述】:
所以我四处寻找解决这个特定问题的方法,我希望有人能给我指明一个好的方向。
我们以 XML 格式接收数据,并且我们只有 XSD 来验证数据。所以我使用 JAXB 来生成 Java 类。当我去解组一个示例 XML 时,我发现缺少一些属性值。事实证明,架构期望这些属性是 QName,但数据提供者没有在 XML 中定义前缀。
例如,一个 XML 属性值是 "repository:<uuid>",但命名空间前缀“repository”从未在数据集中定义。 (不要介意提供商的最佳实践建议对其进行定义!)
所以当我去解组一个样本集时,带有指定前缀的 QName 属性(我上面的样本中的“repository”)是 NULL!所以看起来 JAXB 正在“丢弃”那些具有未定义命名空间前缀的属性 QName 值。我很惊讶它甚至没有保留本地名称。
理想情况下,我希望保持原样,但看起来我无法在绑定时将 QName 映射到字符串(架构到 Java)。
我尝试“手动”将命名空间定义插入 XML,它就像一个魅力。最简单的方法是什么?
有没有办法在运行时“插入”命名空间映射/定义?还是在绑定时“全局”定义它?
【问题讨论】:
-
我强烈建议您发布 CSD 和 XML 文档的相关部分。您收到的 XML 仍然很可能不符合 XSD,这将成为 JAXB 解组的问题。如果您已经确定 XML 实际上符合 XSD(例如,使用在线验证工具),请说出来(以便 SO 帮助者将其排除在外)。
-
我想知道是否应该提供更多细节,但在我的平板电脑上有点困难。下次我将提供代码的实际出价。感谢您的反馈。
标签: java xml jaxb xsd xml-namespaces