PropertyDescriptor.getName()の戻り値に四苦八苦

サーバから戻ってくるXMLのタグが<Message>のように大文字なんですよね。Java側でset/getMessage()というメソッドを作ってもXMLをオブジェクトにバインディングする時にきちんとバインドされません。

BeanUtil.deserialize()の中身でPropertyDescriptor.getProperty("Message")と動いているのでプロパティが取得できないんです。正しくはPropertyDescriptor.getProperty("message")とやらないとsetterが取得できない。さて、JavaBeanの命名規約を見直してみるか…1文字目と2文字目が大文字の場合は特殊なメソッド名として先頭一文字を大文字に変換するような事はないんですが、先頭一文字だけを大文字で認識して欲しいなんてことはできるんだろうか…。

この仕様はよく見てみるとIntrospector.decapitalize()の規約らしい(JavaDocより)。これどうやって解決するの?(笑)

Axisのスタブはちゃんとバインディングのソースを出力していた気がするからそっちも見てみるか。

#Axisのスタブはずるい〜〜〜(T_T)

#プロパティ名がFooの場合はBeanUtil.deserialize()が使えない気がしてきた…。

#とりあえずAxisが出力したスタブに

_operationClient.getOptions().setProperty(MessageContextConstants.CHUNKED, "false");

を追加したら複雑な構造を持った戻り値もきちんとバインドできた!!でもなぁ〜本番開発でもスタブ作るのはなんだか美しくない気がする。まぁスタブのコードを手でいじる事は無いだろうからそれでもいいんだけどAXIOMでできればかなり美しくなるのになぁ〜BeanUtilがなぁ〜〜〜〜。