Jの衝動書き日記

さらりーまんSEの日記でございます。

JAXBでXML名前空間(xmlns)を出したい

例えば、以下のようなXMLを作成する必要があるとする。

<hoge xmlns="http://hoge.co.jp/hoge/Hoge"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://hoge.co.jp/hoge/Hoge hoge.xsd">

       
xmlnsとschemaLocationを出すには以下のようにする。hoge = Hogeクラスにマッピングしているとする。

1. Hogeクラスのパッケージにpackage-info.javaを作成する。

@XmlSchema(
    namespace = "http://hoge.co.jp/hoge/Hoge",
    elementFormDefault = XmlNsForm.QUALIFIED
)
package jp.co.hoge;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

       
2. MarshallerにschemaLocationを設定する

marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://hoge.co.jp/hoge/Hoge hoge.xsd");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

 
これもRESTEasy上でやりたかったが、schemaLocationの出力が無理だった。