如何使用JAXB将多个名称空间编组到XML根元素

时间:2014-04-10 18:28:48

标签: java xml jaxb

我想让JAXB封送到xml,其中命名空间只出现在根元素中,而不出现在其他任何元素中:

<myroot xmlns="http://www.mysite.com" xmlns:a="http://www.mysite.com/a" xmlns:ab="http://www.mysite.com/ab" xmlns:y="http://www.mysite.com/y">
...
</myroot>

我已经尝试了包级别@XmlSchema,但我必须做错事,因为没有任何显示。

这是我的根元素类:

@XmlRootElement(name="myroot")
@XmlAccessorType(XmlAccessType.FIELD)
public class RootElementClass
{
....
}

我还有以下package-info.java:

@XmlSchema
(
    namespace="http://www.mysite.com", 
    elementFormDefault=XmlNsForm.QUALIFIED,
    xmlns=
    {
            @XmlNs(namespaceURI = "http://www.mysite.com",    prefix = ""),
            @XmlNs(namespaceURI = "http://www.mysite.com/a",  prefix = "a"),
            @XmlNs(namespaceURI = "http://www.mysite.com/ab", prefix = "ab"),
            @XmlNs(namespaceURI = "http://www.mysite.com/y",  prefix = "y")
    }
)
package com.seastreetinc.rd.nso.jaxb;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

1 个答案:

答案 0 :(得分:0)

JAXB规范(并且不说)

JAXB(JSR-222)规范未涵盖名称空间声明发生的位置或调用前缀的位置(请参阅:http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html)。

JAXB实现的作用

实现使用的一般策略是计算模型使用的最小命名空间量,并在根元素上声明它们。这可能是您在@XmlSchema注释中声明的内容的一部分。


更新

NamespacePrefixMapper扩展名可用于控制根元素上的命名空间。请参阅下面链接的答案以获取完整示例。