JDeveloper で JAXB プログラミング
JDeveloper 10.1.3 には、JAXB関連機能が追加されています。これを使って、JAXBプログラミングをやってみましょう。
JAXBを良く知らない人のために
JAXBとは、XMLデータに対応するJavaオブジェクトを自動で作ってくれて、Javaオブジェクトの操作を行うと、自然にXMLデータの入出力を行うことができるというものです。一般には、データ・バインディングと呼ばれたりしますので(XMLとJavaオブジェクトをバインドするからね)、JDev/ADFのデータ・バインディングと混同しないようにしましょう。
XMLスキーマの作成
- 新規ギャラリから「General-XML」の「XML Schema」を選択します。この例では、ファイル名を book.xsd としましょう。
- ダイアグラムで適当にデータ構造を作成します。シンプルなものだとたとえば次のようなものです。
ソースは次のようになります。
<?xml version="1.0" encoding="windows-31j" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://jkidd.com/book" targetNamespace="http://jkidd.com/book" elementFormDefault="qualified"> <xsd:element name="book"> <xsd:annotation> <xsd:documentation> A sample element </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:attribute name="title"/> <xsd:attribute name="price"/> </xsd:complexType> </xsd:element> </xsd:schema>
JAX-B Compilerの実行
- book.xsd が選択された状態で、メニューから「ツール=>JAX-B Compiler」を選びます。book.xsd に対応するデータ構造でバインドされたJavaオブジェクトを作成してくれます。
- 作成先のパッケージ名と、テスト用のメイン・クラスを指定します
追加コーディング
- 指定したメイン・クラスを開き、mainメソッド内に記述します。新規データを書き出す場合は、自動作成されたmainメソッドのtryブロック内を次のようにします。
context = JAXBContext.newInstance("com.jkidd.xml"); // 新規データの作成 ObjectFactory factory = new ObjectFactory(); Book book = factory.createBook(); book.setTitle("テスト"); book.setPrice("10000"); // データ書き出し用オブジェクト(マーシャラ)の用意 Marshaller marshaller = context.createMarshaller(); File file = new File("c:\\users\\test.xml"); if (!file.exists()) file.createNewFile(); OutputStream out = new FileOutputStream( file ); // 書き出し marshaller.marshal(book, out);
これでこのクラスを実行すると、C:\Users\test.xml ファイルにデータがXML書式で書き込まれます。
ただし、これでは、ひとつのBookデータしか格納されません。複数データを格納できるようにするには、book.xsd を変更しなくてはなりません。
それについては次の機会に。。。