我想让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;
答案 0 :(得分:0)
JAXB(JSR-222)规范未涵盖名称空间声明发生的位置或调用前缀的位置(请参阅:http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html)。
实现使用的一般策略是计算模型使用的最小命名空间量,并在根元素上声明它们。这可能是您在@XmlSchema
注释中声明的内容的一部分。
NamespacePrefixMapper
扩展名可用于控制根元素上的命名空间。请参阅下面链接的答案以获取完整示例。