えふのへや - 等々力随想

できればもうひとつのブログ http://ameblo.jp/bewise-kwsk/ もご訪問ください

Digester を使う-Java のお勉強

2005-07-26 23:50:18 | モノのこと
.NET Framework には、XMLSerializer というクラスや構造体を XML データにシリアライズ・デシリアライズする標準的なクラスが用意されており、ASP.NET Web サービスなどもこのクラスを (内部的に) 使用して SOAP メッセージの構築などを行っています。

このクラスが割と使いやすく、設定情報の類を保存するためにレジストリではなく、XML ファイルを使用したりしています。

ところで、Java の世界では、Web サービス構築で広く使用されている Apache Axis はシリアライザだけ抜き出して使うようなマニュアルが整備されていませんし、JAXB はシリアライズ対象のクラスを手書きで作ろうという意欲を完全に否定するような作りだし、で設定情報を XML で書いてやろうというところにはなかなかたどり着けませんでした。
# サボらずにちゃんとスキーマを書けば、JAXB で十分なのかもしれませんがね。

最近 (といってもちょっと前)、本屋で攻略 Jakarta Commons という本を見つけ、その中で Digester というコンポーネントがあることを知って、少し試してみました。

Digester コンポーネントは、XML データの各要素に対応する Bean オブジェクトを生成する、あるいは Bean オブジェクトに値を設定するといった操作を記述して Digester オブジェクトを作成し、そのオブジェクトに XML データを食わせることで XML データをデシリアライズした Bean オブジェクトを生成するというものです。

Axis のシリアライザや JAXB のようにシリアライズ対象のクラスにシリアライズに必要な情報を記述するのではなく、シリアライズ情報と Bean オブジェクトとを別々に管理するため、オブジェクトとシリアライズ情報との一貫性をコーディングする側がきちんと管理しなければならないという面倒はありますが、割と安直にデシリアライザが作れるので、結構気に入っています。

ただし、配布されているパッケージではオブジェクトファクトリを扱えない (ように見える) ので、たとえば、enum を使用するには文字列を受け取る setter メソッドを用意して、setter メソッドで enum オブジェクトに変換するか、文字列でとりあえず我慢するかといった選択が必要となってきます。

また、XML 名前空間の扱いも後付けっぽくてあまり好きになれません。

この辺は追々改善されていくでしょうし、必要があれば自分で修正してもいいので、もう少し使ってみようかと思っています。

まあ、Java 5 からアノテーションが使えるようになり、.NET Framework の XMLSerializer のデッドコピーを作ることもある程度は可能になっているので、Digester は今のまま、新しいシリアライザを作るというのもありだとは思いますが。
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« more creative-ノイズキャン... | トップ | Digester を使う・その2-Jav... »
最新の画像もっと見る

コメントを投稿

モノのこと」カテゴリの最新記事