【问题标题】:Duplicate namespace declarations in JAXB generated XMLJAXB 生成的 XML 中的重复命名空间声明
【发布时间】:2010-01-25 09:49:36
【问题描述】:

我正在使用 JAXB 从 Java 对象生成 XML,它是一个实时的、消息率非常高的应用程序,并且大部分时间都可以正常工作。但是,有时在没有任何明显线索的情况下,我会在生成的 XML 中得到重复的命名空间声明。例如:

<UpdateRequest xmlns="http://xml.mycomp.com/ns/myservice" 
               xmlns="http://xml.mycomp.com/ns/myservice">
    <field1>value</field1>
    ...
</UpdateRequest>

以前有人见过这种行为吗?

【问题讨论】:

  • 奇怪...您能发布生成此 XML 的带有 JAXB 注释的 Java 类吗?
  • 我也想要,但我认为公司不会喜欢它。奇怪的是 99.9% 的时间对象被编组是好的,然后我们偶尔会遇到这个问题。我们现在假设存在多线程问题..

标签: java jaxb


【解决方案1】:

检查此类的 xsd 代码是否允许创建超过 1 个重复属性的实例。如果是这样,您可以避免重复设置每个 UpdateRequest 对象的 xmlns 属性的实例数。

如果问题出在你的代码上(可能这个属性被创建了两次)并且你已经限制了属性的实例数量(正如我上面所说的),程序将在运行时显示一个错误,抱怨你正在尝试插入已定义的属性。

【讨论】:

  • 谢谢,但这不是重复的属性,它是 XML 顶级元素中的重复 xmlns="blah"
【解决方案2】:

link 可能会提供解决方案。

这是从上述链接逐字引用的相关部分,可能与您相关:

类似的显式包含模式 输入实例文档的元素 如果您实例化 JAXB,则会发生 使用 some 对象的元素 (抽象)XML 模式基类型 so 该元素将具有 基本类型的元素标签。

第二,避免 xs:anySimpleType 因为 这也将创建多个 对绑定到的命名空间的引用 xsi 和 xs,以及类型属性 包含实际类型。和你 失去了 JAXB 的打字优势 Java 类中的字段,以便 你失去了Java的所有检查 编译器可能会这样做,并且对于 解组你必须处理 自己完成所有转换。

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多