JDeveloper で JAXB プログラミング

JDeveloper 10.1.3 には、JAXB関連機能が追加されています。これを使って、JAXBプログラミングをやってみましょう。
JAXBを良く知らない人のために
JAXBとは、XMLデータに対応するJavaオブジェクトを自動で作ってくれて、Javaオブジェクトの操作を行うと、自然にXMLデータの入出力を行うことができるというものです。一般には、データ・バインディングと呼ばれたりしますので(XMLJavaオブジェクトをバインドするからね)、JDev/ADFのデータ・バインディングと混同しないようにしましょう。

  1. XMLスキーマの作成
  2. JAX-B Compilerの実行
  3. 追加コーディング

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 を変更しなくてはなりません。
それについては次の機会に。。。