XML名称空间前缀不能为空

时间:2012-10-09 12:12:21

标签: xml namespaces jaxb marshalling

我正在尝试将对象编组为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。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

了解更多信息