注: 私は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 {
}
forum13408684.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 {
}
forum13408684.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)
JAXBプロバイダーとしてMOXyを指定すると(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"/>