はじめてのJakarta Commons Betwixt
BetwixtはJavaBeansを簡単にXMLに書き出すためのAPIです。また読み込むことも可能です。(厳密にはCommons Digesterを使うのだけど)
Primitive(intとかString)だけなら、とにかく非常に簡単に始められます。
XMLスキーマやDTDがないXMLを読み書きするならBetwixtがいい選択になると思います。
ここでは ver0.6を元に説明します。
【公式サイト】
http://jakarta.apache.org/commons/betwixt/
準備
以下のパッケージ(API)をダウンロードしてjarファイルをパスに追加する必要があります。
ダウンロードはhttp://jakarta.apache.org/site/binindex.cgiから行えます。
バージョンはその時点で一番近いものを、ファイル形式はzipでもtar.gzでも同じです。
■Commons BetWixt 0.6
commons-betwixt-0.6.jar
■BeanUtils 1.7.0
commons-beanutils.jar
■Commons Collections 2.1.1
commons-collections-2.1.1.jar
■Commons Digester 1.6
commons-digester.jar
■Commons Logging 1.0.4
commons-logging.jar
サンプル
実行すると以下のようにファイル c:\tmp\p.xml と画面に以下のように出力されます。
<?xml version="1.0" encoding="Shift_Jis"?> <user name="Huck" age="25"> <friends> <friend> <name>Tom</name> </friend> <frend> <name>Jim</name> </friend> </friends> </user>
Java Code
配列を扱うときは、addとgetを用いますが、getの場合は、後にsをつけるとか、Listをつけるなどした方がすっきりします。
public void addFrend(Frend num);
public Frend[] getFrends();public Frend[] getFrendList();
■test.Person.java
/* * Created on 2004/10/05 * Author aki@www.xucker.jpn.org * License Apache2.0 or Common Public License */ package test; import java.io.File; import java.io.FileWriter; import java.util.List; import java.util.Vector; import org.apache.commons.betwixt.BindingConfiguration; import org.apache.commons.betwixt.io.BeanReader; import org.apache.commons.betwixt.io.BeanWriter; public class Person { public static final void main(String args[]) throws Exception{ String path="c:\\tmp\\p.xml"; //Configを作成 (idを出力しない) 省いてもいい。 BindingConfiguration config=new BindingConfiguration(); config.setMapIDs(false); BeanWriter writer = new BeanWriter(new FileWriter(path)); writer.setBindingConfiguration(config); writer.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>"); //JavaBeanの値を設定 Person person=new Person(); person.setName("Huck"); person.addFrend(new Frend("Tom")); person.addFrend(new Frend("Jim")); //書き出し writer.write(person); writer.close(); //XMLからJavaBeanを作成 BeanReader reader=new BeanReader(); reader.registerBeanClass(Person.class); Person map=(Person)reader.parse(new File(path)); //コンソールに出力して内容を確認 BeanWriter writer2 = new BeanWriter(); writer2.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>"); writer2.setBindingConfiguration(config); writer2.write(map); writer2.close(); } public Person(){ frendList=new Vector(); } public int getAge() { return age; } public void setAge(int value) { this.age = value; } private String name; private int age=25; List frendList; public void addFrend(Frend num){ frendList.add(num); } public Frend[] getFriends(){ Friend number[]=new Friend[friendList.size()]; for (int i = 0; i < number.length; i++) { number[i]=((Friend)friendList.get(i)); } return number; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
■test.Friend.java
package test; /* * Created on 2004/10/05 * Author aki@www.xucker.jpn.org * License Apache2.0 or Common Public License */ /** * * */ public class Friend { String name; public Friend(){ } public Friend(String v){ this.name=v; } public String getName() { return name; } public void setName(String v) { this.name = v; } }
FAQ
XML宣言はどうやって書くのか
writer.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>");
出力時のid属性はどうやって消すの?
BindingConfiguration config=new BindingConfiguration(); config.setMapIDs(false); BeanWriter writer = new BeanWriter(fw); writer.setBindingConfiguration(config);
関連
Jakarta Commons Betwixt .betwixt ファイルの記述の仕方