Bits of Java (トップ)

目次  前へ  次へ

XML から JavaBeans へ

前のページで作成した sample.xml を XMLDecoder を使ってJavaBeans に復元するプログラムです。

XMLDecoder のコンストラクタでは XML を読み込む InputStream を指定します。 XMLDecoder はオーバーロードされたいくつかのコンストラクタがありますが クラスローダ を指定できるタイプが JDK1.5 から追加されています。

XMLDecoder オブジェクトを作成したら オブジェクト への復元は readObject メソッドで行います。readObject メソッドの戻り値は Object 型なので本来の型にキャストします。

XMLDecoder#close はコンストラクタで設定した InputStream オブジェクトをクローズします。

DecodeTest の実行結果は以下のように標準出力に表示されます。

value : 100
foo.text : AAA

/******************** DecodeTest.java ********************/
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class DecodeTest {
    public static void main(String[] args) throws FileNotFoundException {
        XMLDecoder decoder = new XMLDecoder(
                                 new BufferedInputStream(
                                     new FileInputStream("sample.xml")));
        SampleBean bean = (SampleBean)decoder.readObject();
        decoder.close();
        System.out.println("value : " + bean.getValue());
        Foo foo = bean.getFoo();
        System.out.println("foo.text : " + foo.getText());
    }
}

/******************** sample.xml ********************/
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.5.0_01" class="java.beans.XMLDecoder">
 <object class="SampleBean">
  <void property="foo">
   <object class="Foo">
    <void property="text">
     <string>AAA</string>
    </void>
   </object>
  </void>
  <void property="value">
   <int>100</int>
  </void>
 </object>
</java>

/******************** SampleBean ********************/
public class SampleBean {
    private int value;
    private Foo foo;

    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public Foo getFoo() {
        return foo;
    }
    public void setFoo(Foo foo) {
        this.foo = foo;
    }
}

/******************** Foo.java ********************/
public class Foo {
    private String text;

    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}