@634

XStream

Advertisement

概要

XStreamはJavaのObjectとXMLの相互変換を行うフレームワーク。
Ease of useを指標に開発されており、簡単に上記の操作を行うことができる。
JavaSE5対応のアノテーションも用意されている。
ライセンスはBSDライセンス。

公式サイト:http://xstream.codehaus.org/

特長

Ease of use.
  高いレベルのFacadeが用意されており、シンプルで簡単に利用することができる。

No mappings required.
  XMLの変換に対して特別なマッピングを必要としない。

Performance.
  高速に、かつ少ないメモリ使用量で動作するように設計されているため、巨大なオブジェクトも問題なく扱うことができる。

Clean XML.
  リフレクション機能を利用して情報を取得しており、純粋なJavaのシリアライゼーションよりもきれいで読みやすいXMLコードを出力する。

Requires no modifications to objects.
  シリアライズは内部のフィールドに加えてprivate/finalが付加されている情報もサポートしている。また、公開されていない情報やインナークラスにも対応している。

Full object graph support.
  重複した参照や相互参照にも対応。

Integrates with other XML APIs.
  他のツリー構造モデルとの相互変換が可能。

Customizable conversion stategies.
  XMLを操作する戦略を代替可能

Error messages.
  エラー発生時に容易に問題を修正できるように、詳細なエラーメッセージを提供。

http://xstream.codehaus.org/より)

QuickStart

1.jarファイルダウンロード
http://xstream.codehaus.org/download.htmlよりバイナリを入手。

2.POJO(JavaBean)生成
public class Emp {
    private String name;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


3.クラス生成をXMLに変換してみる
import com.thoughtworks.xstream.XStream;

public class SerializeEmp {
    public static void main(String[] args){
        XStream xstream = new XStream();
        xstream.alias("emp", Emp.class);

        Emp emp = new Emp();
        emp.setName("NAME");

        System.out.println(xstream.toXML(emp));
    }
}

4.結果
<emp>
    <name>NAME</name>
</emp>

いろいろなパターン

配列/コレクション

Emp
public class Emp {
    private String[] note ;
    public String[] getNote() {
        return note;
    }

    public void setNote(String[] note) {
        this.note = note;
    }
}

SerializeEmp
import com.thoughtworks.xstream.XStream;

public class SerializeEmp {
    public static void main(String[] args){
        XStream xstream = new XStream();
        xstream.alias("emp", Emp.class);
        
        Emp emp = new Emp();
        String[] note = {"Java", "XML", "C", "C++"};
        emp.setNote(note);

        String result = xstream.toXML(emp);

        System.out.println(result);
    }
}

結果
<emp>
  <note>
    <string>Java</string>
    <string>XML</string>
    <string>C</string>
    <string>C++</string>
  </note>
</emp>

クラス階層

Emp
public class Emp {
    String name;
    Emp emp;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Emp getEmp() {
        return emp;
    }

    public void setEmp(Emp emp) {
        this.emp = emp;
    }
}

SerializeEmp
import com.thoughtworks.xstream.XStream;

public class SerializeEmp {
    public static void main(String[] args){
        XStream xstream = new XStream();
        xstream.alias("emp", Emp.class);

        Emp emp = new Emp();
        emp.setName("NAME1");
        Emp emp2 = new Emp();
        emp2.setName("NAME2");
        emp.setEmp(emp2);

        System.out.println(xstream.toXML(emp));
    }
}

結果
<emp>
    <name>NAME1</name>
    <emp>
      <name>NAME2</name>
    </emp>
</emp>

XMLからの復元

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class UnSerializeEmp {
    public static void main(String[] args) {
        String empXml = "";
        empXml += "<emp>";
        empXml += "<name>NAME</name>";
        empXml += "<age>20</age>";
        empXml += "</emp>";

        XStream xstream = new XStream(new DomDriver());
        xstream.alias("emp", Emp.class);
        Emp emp = (Emp)xstream.fromXML(empXml);
        System.out.println(emp.getName());
        System.out.println(emp.getAge());
    }
}

XML解析ライブラリの指定

XStreamクラスをインスタンス化する際に、引数にドライバクラスを渡すことで、解析ライブラリの指定を行うことができる。

XStream xstream = new XStream(new DomDriver());
XStream xstream = new XStream(new XppDriver());
XStream xstream = new XStream(new XomDriver());
なお、DomDriver以外のドライバには別途外部ライブラリファイルの入手が必要。

XPP
http://www.extreme.indiana.edu/xgws/xsoap/xpp/
XOM
http://www.xom.nu/

リンク

オフィシャルサイト
http://xstream.codehaus.org/
APIドキュメント(JavaDoc)
http://xstream.codehaus.org/javadoc/index.html

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール

ビリヤード