注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。
您看到的行为会因您使用的 JAXB 实现而异。MOXy 实现将为您提供您正在寻找的结果。我将在下面演示。
JAVA模型
下面是将用于此示例的 Java 模型。包级别@XmlSchema
注释将用于指定每个包中的命名空间限定(参见: http ://blog.bdoughan.com/2010/08/jaxb-namespaces.html )。
论坛13408684.aA
package forum13408684.a;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class A {
}
论坛13408684.a.package-info
@XmlSchema(namespace="A", elementFormDefault=XmlNsForm.QUALIFIED)
package forum13408684.a;
import javax.xml.bind.annotation.*;
论坛13408684.bB
package forum13408684.a;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class B {
}
论坛13408684.b.package-info
@XmlSchema(namespace="B", elementFormDefault=XmlNsForm.QUALIFIED)
package forum13408684.b;
import javax.xml.bind.annotation.*;
演示代码
package forum13408684;
import javax.xml.bind.*;
import forum13408684.a.A;
import forum13408684.b.B;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(A.class, B.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(new A(), System.out);
marshaller.marshal(new B(), System.out);
}
}
输出
JAXB 参考实现
下面的输出与您在问题中描述的内容相匹配:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a xmlns="A" xmlns:ns2="B"/>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:b xmlns="A" xmlns:ns2="B"/>
EclipseLink JAXB (MOXy)
如果您将 MOXy 指定为您的 JAXB 提供程序(请参阅:http ://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html ),您将获得您正在寻找的输出。
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns="A"/>
<?xml version="1.0" encoding="UTF-8"?>
<ns0:b xmlns:ns0="B"/>