読者です 読者をやめる 読者になる 読者になる

XMLシリアライゼーションフレームワーク Simple を試す〜その1


Simpleとは

JavaXMLリアライゼーションフレームワークです。ハイパフォーマンスを売りにしているようです。本家サイトは以下
http://simple.sourceforge.net/home.php
今回試すのは、Simple 2.1.3

簡単なオブジェクトのシリアライズ

落としたファイルのsimple-xml-2.1.3\jarにあるsimple-xml-2.1.3.jarをクラスパスに追加します。
本家のチュートリアルを参考に・・
まず、シリアライズ対象のオブジェクトを作成します。

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Example1 {
    @Element private String text;
    @Attribute private int index;

    public Example1(){}
    public Example1(String text, int index) {
        this.text = text;
        this.index = index;
    }

    public String getMessage() {
        return text;
    }
    public int getId() {
        return index;
    }
}

XMLのルートと要素、属性に対応するアノテーションが用意されているため、対象フィールドにアノテートします。では動作確認してみます。

import java.io.File;
import org.junit.Test;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

public class Example1Test {
    @Test public final void testSerializ() throws Exception {
        Serializer serializer = new Persister();
        serializer.write(new Example1("message", 99),
                new File("example.xml"));
    }
}

Persisterオブジェクトのwriteメソッドに先ほど作成したExample1オブジェクトと、対象とするFileを渡すだけで以下のXMLファイルが作成されます。

<example1 index="99">
   <text>message</text>
</example1>

アノテーション付けておけば簡単にシリアライズすることができます。

簡単なオブジェクトのデシリアライズ

今作成したオブジェクトをデシリアライズしてみます。以下のテストメソッドを追加します。

    @Test public final void testDeSerializ() throws Exception {
        Serializer serializer = new Persister();
        Example1 example = serializer.read(Example1.class, new File("example.xml"));
        System.out.println(ToStringBuilder.reflectionToString(example));
    }

先ほどと同様に、Persister の read メソッドを呼び出すだけです。以下のような結果が得られ、デシリアライズされていることが確認できます。

etc9.example.Example1@1c1ea29[text=message,index=99]

なお、Example1に引数なしのコンストラクタが無い場合、デシリアライズはできなくなります。

XMLのタグ名を指定する

先の例で出力するXMLのタグ名を指定するには、以下のようにnameを指定します。

@Root(name="root")
public class Example1 {
    @Element(name="message") private String text;
    @Attribute(name="id") private int index;

    public Example1(){}
    ・・・
}

これにより、タグ名を任意の名前で出力することが可能となります。

<root id="99">
   <message>message</message>
</root>

まとめ

JPAと同じような扱いで、XMLへのシリアライズとデシリアライズが簡単に実行できました。
本日はここまでにします・・