9. JAXB(1)
2005.10.14 株式会社四次元データ 小野彩子
9.1 JAXBとは
これまで、JavaでXMLを操作する方法として、DOMを見てきました。もちろん、DOMを使用すれば、XMLからデータを読み込んだり、インスタンスのデータよりXMLを作成したりすることが可能です。ただし、実際にプログラムを記述する場合はどうでしょう?DOMを使用してプログラムを作成する場合、プログラマはDOMだけでなく、操作するXMLの構造についても熟知している必要があります。
例えば、社員データが記述されているemployee.xmlよりデータを読み込み、標準出力に表示するプログラムを考えましょう。
employee.xml
<employees>
<employee>
<id>000001</id>
<name>山田 太郎</name>
<officeCode>3</officeCode>
</employee>
<employee>
<id>000002</id>
<name>磯野 次郎</name>
<officeCode>1</officeCode>
</employee>
<employee>
<id>000003</id>
<name>川谷 三郎</name>
<officeCode>1</officeCode>
</employee>
</employees>
プログラムを実行すると、以下のように表示されます。
$java ReadXMLSample id:000001 name:山田 太郎 officeCode:3 id:000002 name:磯野 次郎 officeCode:1 id:000003 name:川谷 三郎 officeCode:1
プログラムをDOMで実装した場合、以下のようになるでしょう。
public static void main(String args[]){
Document document= DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new File("employee.xml"));
Element rootElement=document.getDocumentElement();
NodeList empNodes=rootElement.getElementsByTagName("employee");
for(int i=0;i<empNodes.getLength();i++){
Element empNode=(Element)empNodes.item(i);
NodeList idElements=empNode.getElementsByTagName("id");
System.out.println("id;"+idElements.item(0)
.getFirstChild().getNodeValue();
...
}
return employees;
}
上のプログラムでは、id要素の値を取得し、標準出力に表示しています。このとき、当然、「id要素がemployees要素の子要素のemployee要素の子要素である」と理解していなければ、プログラムを記述することができません。それでなくても、id要素の値を取得する部分は、いろいろなメソッドを呼び出さなければならず、煩雑です。
そこで、開発されたのがJAXBです。JAXBはJava Architecture for XML Bindingの略で、DOMやSAXよりも簡単にXMLにアクセスするAPIを提供します。JAXBの特徴は、XMLのスキーマからXML操作するためのJavaクラスを自動生成する点にあります。

JAXBを利用し、自動生成したクラスを使用することによって、XMLの構造をほとんど意識せずに、XMLデータの読み書きを行うプログラムを作成することができます。それでは、JAXBについてみていきましょう。

