Java 如何使用JAXB将多个名称空间封送到XML根元素

Java 如何使用JAXB将多个名称空间封送到XML根元素,java,xml,jaxb,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> 我还有以下包-info.java: @XmlSchema ( na

我希望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>
我还有以下包-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;
JAXB规范说明了什么(没有说明) JAXB(JSR-222)规范没有涵盖名称空间声明出现的位置或前缀的调用(请参阅:)

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


更新
NamespacePrefixMapper
扩展可用于控制根元素上的命名空间。有关完整示例,请参见下面链接的答案


嗨,布莱斯,谢谢你的回复!我应该承认,我对使用xml的名称空间是相当陌生的,所以我可能不太了解这里的内容。基本上,我有一个服务器,它需要在根xml元素中有特定的名称空间,请求才能工作,我希望能够配置我的Java对象,以便JAXB可以在编组到xml的过程中添加这些名称空间。也许我所要求的是不可能用JAXB实现的。我会读你上面的博客,看看有没有办法。
@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;