最も基本的なアノテーション
次のようなXMLをクラスにマッピングする。
<root-element attr="abc">
<sub-element></sub-element>
</root-element>
アノテーションのつけ方はこんな感じ。
@XmlRootElement(name="root-element")
public class RootElem {
@XmlElement(name="sub-element")
public String subElem;
@XmlAttribute
public String attr;
}
インデックスファイル
バインディングしたいクラスのパッケージにjaxb.indexというファイルを作る。
中身はパッケージなしのクラス名を1行に1つずつ書いたテキストファイル。後述のJAXBContextで指定したパッケージからこのインデックスファイルが読まれる。
継承
abstract public class SuperClass {
@XmlAttribute
public String name;
}
@XmlRootElement(name="subclassA")
public class SubClassA extends SuperClass {
public String value;
}
@XmlRootElement(name="subclassB")
public class SubClassB extends SuperClass {
@XmlAttribute
public int c;
@XmlAttribute
public int value;
}
マーシャリング(XML生成)
// jaxbtext.entityパッケージのクラスを対象にする
JAXBContext context = JAXBContext.newInstance("jaxbtest.entity");
RootElem root = <出力するオブジェクト>
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Writer out = new OutputStreamWriter(new FileOutputStream("output/marshal.xml"), "utf-8");
marshaller.marshal(root, out);
out.close();
アンマーシャリング(XML読み込み)
JAXBContext context = JAXBContext.newInstance("jaxbtest.entity");
Unmarshaller unmarshaller = context.createUnmarshaller();
RootEntity obj = (RootEntity)unmarshaller.unmarshal(new File("output/marshal.xml"));