Jakarta Commons Betwixtを使う

 Jakarta Commons Betwixtは、 JavaBeanクラスをXML文書へシリアライズする処理を簡単に行うためのクラスライブラリです。 シリアライズ(出力)の反対のデシリアライズ(XMLからBeanオブジェクトを生成すること)もできます。 Betwixtとはまた聞きなれない英単語ですが、「Between」の古語だそうです。 上記のホームページにも書かれていますが、 「Bean To XML」の頭文字をとって、「*B*T*X*」がこの順番に並ぶ単語を探していたら見つかった、 ということです。

 それで同じJakarta CommonsのDigesterとの違いですが、 Digesterは主に「XML→JavaBeanクラス」の処理(Betwixtでいうデシリアライズ) を主目的にしており、特にアプリケーション・データではなく、 アプリケーションの設定パラメータのロードに使うことを前提に、便利なAPIが用意されています。 それに対してBetwixtは「JavaBeanクラス→XML」のシリアライズ処理が主眼で、 アプリケーション・データのシリアライズに特化しているようです。

 しかし、とりあえず簡単なサンプルということで前出のDigesterのサンプルを改造して、 BetwixtでXML文書を標準出力に出力するようにしてみましょう。 (Betwixt 1.0-alpha1で確認しています)

package test.giacomo;

import java.io.File;
import org.apache.commons.digester.Digester;
import org.apache.commons.betwixt.io.BeanWriter;

/**
 * DigesterでXMLファイルを読み、作成したBeansからBetwixtでXMLファイルを作成するサンプルです。
 */
public class LoaderConfigBetTester1 {
    private static final String xmlConfigFile = "./loader-config1.xml";

    public void test(){
        Digester digester = new Digester();

        digester.addObjectCreate("loader-config/query-def",
                                 "test.giacomo.LoaderConfigBean");
        digester.addCallMethod("loader-config/query-def/name", "setName", 0);
        digester.addCallMethod("loader-config/query-def/driver-spec", "setDriverSpec", 0);
        digester.addCallMethod("loader-config/query-def/hostname", "setHostName", 0);
        digester.addCallMethod("loader-config/query-def/port", "setPort", 0);
        digester.addCallMethod("loader-config/query-def/database", "setDatabase", 0);
        digester.addCallMethod("loader-config/query-def/username", "setUserName", 0);
        digester.addCallMethod("loader-config/query-def/password", "setPassword", 0);
        digester.addCallMethod("loader-config/query-def/query", "setQuery", 0);
        digester.addCallMethod("loader-config/query-def/input-data-file-name", "setInputDataFileName", 0);

        /*** この部分がBetwixtのサンプル ***/
        try {
            LoaderConfigBean c = (LoaderConfigBean) digester.parse(new File(xmlConfigFile));
            BeanWriter writer = new BeanWriter(System.out);
            writer.enablePrettyPrint();
            writer.write(c);
            writer.close();
        } catch(Exception ex){
            ex.printStackTrace();
        }
        /*** この部分がBetwixtのサンプル ここまで ***/
    }

    public static void main(String[] args){
        LoaderConfigBetTester1 my = new LoaderConfigBetTester1();
        my.test();
    }
}

 素直な使い方だとあまり特筆することはないのですが一点だけ。 BeanWriter.write()に渡すBeanクラスは、publicクラスでないといけません。 publicでないクラス(BeanWriterから見えないクラス)を渡すと、 エラーにはなりませんが、中身の要素の値が全て空になってしまいます。

Java kowaza Top

(first uploaded 2004/05/30 last updated 2006/07/09, URANO398)

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!