Betwixt

設定ファイルにXMLを使って、Javaで扱う場合、
XMLを読むだけならDigesterXMLの書式/スキーマが与えられている or ちゃんと用意する必要があるのならRelaxerなどのXMLバインディングツールがおすすめですが、

  • XMLを読み書きする
  • XMLの書式は簡単なものでよい
  • XMLの書式に細かい要望は無い(自分が勝手に決められる)
  • XMLの要素はJavaBeanにマッピングできれば良い

にあてはまるなら、Betwixtは良い選択肢です。

Betwixt*1はJavaBeanオリエンテッドXMLバインディングツールです。先にJavaBeanのクラスを作っておけば

ができます。

// beanのインスタンスを作る

// Betwixtで出力
FileWriter fw = new FileWriter("config.xml");
fw.write("\n");
BeanWriter writer = new BeanWriter(fw);
writer.enablePrettyPrint();
writer.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
writer.setInitialIndentLevel(0);
writer.getBindingConfiguration().setMapIDs(false);
writer.write(bean);
fw.flush();
fw.close();
// Betwixtで読む
InputStream is = new FileInputStream("config.xml");
BeanReader reader = new BeanReader();
reader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
reader.getBindingConfiguration().setMapIDs(false);
reader.registerBeanClass(Beanのクラス);
bean = (Beanのクラス)reader.parse(is);

ああ、簡単。
リストも対応できます*2
出力フォーマットはデフォルトで要素名にクラス名/プロパティ名、要素値にそのプロパティの値、ですが、上記サンプルのように

writer.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);

という設定をすると要素名にクラス名、属性名にプロパティ名、属性値にそのプロパティの値、というふうにもできます。
他にもある程度融通は利きますが、あまりフォーマット、「人間による記述のし易さ」にこだわるとBetwixtではおっつかなくなるかもしれません。

*1:ビトウィクストと読みます。betweenの古語らしいです

*2:リストを保持するbeanはリストに対してgetメソッドとaddメソッドが必要