Java オブジェクト XML変換
金曜の帰りの電車でがーっと作った。
最初 serialize で通信してたのを、バージョンの意識がうっとおしいのと他言語でも処理できるようにしようということで急遽。あり物でいいのあるんだろうか…?
任意のオブジェクトを XML 表現にできるけどたくさんの制限あり。ほぼ通信向けに特化したので実用上ほとんど問題ないけど applet で setAccessible(true) が効かないことだけは痛かった…。仕方なくやり取りするクラスのフィールドは public に。
まぁこれでフィールドの追加/削除に寛容なオブジェクト通信の手段は確立された。
いつ公開するかは不明…。あと、効率はまだ調べて無い-_-。
Java は primitive と array を特化処理にしないといけないのでうざかったなぁ…。
あと、実直にフィールドを書きだすと Collection クラスとかで冗長な出力になるのでその辺も特化処理で簡潔な出力にした。しかしそうすると、それらのクラスのサブクラスをテキスト化するときにサブクラスのフィールドが書きだされないという問題があり、そういうクラスはサブクラスでフィールドの追加をするなという制限にしたり^^;。
やり取りするオブジェクトへの融通性より言語非依存性を優先して、serialize の仕組みは一切使わない、その代わりやり取りするクラスの構造をシンプルにせよ、と利用者側に責を課すことにした。
transient をどうしようかと思ったけど、書きださないことにした。アプリケーションオブジェクトなど、シリアル化が明らかに困るという目的で transient 化しているケースを想定して書きださない。フォーマットの効率化目的で transient を用いているようなクラスは XMLSerializer の対象としない。たとえば HashMap とかはそういう類。Map は特化対応したけど。
final フィールドは書きだすが、復元できない。
と、いったところ。いまのところ。