JAXBで名前空間が上手く設定できました。
http://d.hatena.ne.jp/cero-t/20090317/1237305128
↑このエントリーの続き。とりあえず問題が解決しました。
全てのXML要素にPrefixをつけるには、以下の2つのアノテーションを指定する。
- package-info.javaにて、@XmlSchemaアノテーションでelementFormDefaultにQUALIFIEDを指定する。
- バインディングする各クラスにて、@XmlTypeアノテーションでnamespaceを指定する。
package-info.javaは、こんな感じ。
@javax.xml.bind.annotation.XmlSchema( elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED ) package hoge;
任意の文字列のPrefixをつけるには、(JAXB RI 2.0.5では)Marshaller#setPropertiesで
キーに、com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper.PROPERTYを指定して、
値に、com.sun.xml.internal.bind.marshaller.NamespacePrefixMapperをextendsしたクラスを渡す。
NamespacePrefixMapperをextendsしたクラスでは、
String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix)
を実装する。
ここで、自分のつけたいprefixをreturnすればOK。
人に相談すれば自己解決する、の法則でした。