よきにはからってバインディング完成!

ふぅ〜ひさびさに脳みそに汗かいたね!(笑)

とりあえず生成されたオブジェクトをAxisで投げた時に送信されるSOAPエンベロープが送られてきたテストデータと100%一致(ネームスペース名は除く)したのでこのツールは完璧にXML→オブジェクトのバインディングができたことになる!

自分専用なのでクラス1個の中でコード書いたから300行にもなっちゃった。そのくせメソッドは20個しかない。これから汎用的に使えるようにするにはプリミティブ型の扱いをもっとたくさん(booleanとかlongとか今やってない)のと、Mapへのバインディングの追加かな。

このツールでできる事を一言で言うならよくあるXMLバインディングライブラリの自前設定が不要(というよりそんな機能作ってない)で、このツールが持つ命名規約は「タグ名の英数字と、setterの英数字が一致する事」です。記号を削除して大文字小文字も識別せずにsetterを呼び出すので、たいていのタグはsetterとマッチします。

オブジェクトが階層化されていても関係なし。親のオブジェクトのsetterの引数の型とタグ名が一致すればインスタンスを作ってバンバンバインディングしていきます。

とりあえず目標達成!!予定よりだいぶ早く終わったので次のことをやろう〜。このツールのもっともひどい事は試行錯誤しかながら作ったので構造が汚いのと下記のようなとりあえずつけた名前のメソッドがあること(笑)なんか英語を調べてるのも面倒だったからそのまま日本語でメソッド名書いた(ぉぃ)

public void よきにはからってSetterを呼んでくれるメソッド(Object targetObject, String propertyName, Object propertyValue) {

まぁ、なんていうかBetwixtのバインディング部分を書き換えた方が早いデス。Betwixtは内部的にPropertyDescriptorを使っているので、Introspectorの命名規約の制約を受けます。ここをよきに計らってくれるクラスに置き換えてしまえばオッケーなわけです。と思ったらXMLIntrospectorってクラスがある…もしかして簡単に差し替えられるんじゃ・・・。