XStreamAdvertisement概要
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!ログールビリヤード |