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についてみていきましょう。