前のページで作成した 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;
}
}