【问题标题】:XML namespace prefix cannot be emptyXML 命名空间前缀不能为空
【发布时间】:2012-09-29 18:27:35
【问题描述】:

我正在尝试将对象编组为 XML,但名称空间前缀有问题(我不想有任何前缀)。

我正在使用 bindigs 文件来自定义生成的类。 生成的 package-info.java 文件包含以下内容:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.test.com", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = {
@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.test.com", prefix = "")})
package com.test;

所以,前缀设置为“”,但是当生成 XML 时,我有一个生成的前缀。 如果我使用另一个值作为前缀(不同于空字符串),则会使用正确的前缀生成 XML。

【问题讨论】:

    标签: xml namespaces jaxb marshalling


    【解决方案1】:

    使用最新的 JAXB,您必须将 QUALIFIED 设置为 XmlSchema 注释的 elementFormDefault 字段。像这样:

    @XmlSchema (
        elementFormDefault= XmlNsForm.QUALIFIED,
        ...)
    

    否则,JAXB 将添加自动前缀(ns1、ns2、...)

    【讨论】:

      【解决方案2】:

      您的JAXB (JSR-222) 实现不保证它将使用@XmlSchema 注释中指定的前缀。 EclipseLink JAXB (MOXy) 将如此,JAXB RI 的最新版本也将如此。

      JAXB RI 提供了一个 NamespacePrefixMapper 扩展,现在 MOXy 支持该扩展以更好地控制所使用的前缀。

      更多信息

      【讨论】:

      • 我以前读过这个选项,但我希望它只能通过绑定来解决。
      • @ovi2ut - 就像我说的 EclipseLink MOXy 和最新版本的 JAXB RI 将使用 @XmlSchema 注释中指定的前缀。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2012-05-27
      相关资源
      最近更新 更多