JAXB (Java XML Binding)
最近、JavaでXMLを取り扱うことがあったのだが、DOMやSAXとかを使って解析するのは結構面倒くさい。
Java 6からは、XML SchemaからJavaクラスを生成してくれるJAXBというライブラリが標準添付されていて、とっても便利。(Relax NGやDTDにも対応してるらしい)
正しい構造のXMLを生成していることを静的にチェックできるし、Eclipseを使っていればどのような子Elementがあるか補完で分かるし、検証や名前空間の扱いとかも楽々。
クラスの生成は、JDK6を入れて以下のコマンドを実行すればOK!
xjc -p 出力先パッケージ名 -d 出力先ディレクトリ XMLスキーマファイル.xsd
あとは、Unmarshallerを使ってXML文書の解析が行える。
JAXBContext context=JAXBContext.newInstance("↑で生成したパッケージ名(複数なら:区切り)");
Unmarshaller unmarshaller=context.createUnmarshaller();
JAXBElement<?> myElement=(JAXBElement<?>)unmarshaller.unmarshal(XMLデータの入力元InputStream);
Marshallerを使えば、XMLの生成が行える。
Marshaller marshaller=context.createMarshaller();
JAXBElement<MyElementType> myElement=ObjectFactory.createMyElement(...);
marshaller.marshal(myElement, XMLデータの出力先OutputStream);
生成されるクラスにちょっとクセがあって、XML Schemaで
<xsd:element name="my_element" type="MyElementType" />
のように、(匿名typeではなく)elementとtypeの定義が別になっていると、my_elementに相当するクラスは作成されず、代わりにJAXBElement
ただし、(生成されたクラスの中で)JAXBElement