S2Axis 自動 BeanMapping
一応出来るようになりました.しかし...
今のやり方でいいのかはかなり怪しいです.Axis の実装を十分に理解できていないまま,「なんか出来たっぽい」という程度の感じ.
どうやら Axis の「サービス」を表現する
WSDDService
JavaServiceDesc
SOAPService
の関係,そして Java 型と XML 型のマッピング情報を保持する
TypeMappingRegistryImpl
TypeMappingImpl
DefaultSOAPEncodingTypeMappingImpl
などをちゃんと理解しないといけないっぽい.特に,TypeMapping
の delegate ってのがどういう意味を持つのかがポイントになるかも.今のやり方だと JavaServiceDesc
が持っている TypeMappingImpl
にマッピングを追加してもうまくいかなくて,delegate 先の DefaultSOAPEncodingTypeMappingImpl
にマッピングを追加することで結果オーライなのですが,これってサービス固有の TypeMapping じゃないような? うーみゅ...
ともあれ (JW),引数・戻り値型とも単純な JavaBeans なら特に TypeMapping を指定しなくても呼び出しが出来るようになったと思います.これで手軽に Web サービスを試すことができます.たいていの場合は
<component name="foo" class="..."> <meta name="s2axis:rpc-service"/> </component>
だけでもうまく動くはず.
でも,実際の開発で使う場合にそれでいいのかはちょっと疑問.というのも,これがうまくいくのはクライアントも Java (もしかしたら Axis のみ?) の場合だけだと思うからです.なんせ,Java 型の FQN から XML 型の QName を決定してますから.普通に考えたらこれは .NET との間では通用しないはず.まぁ,Java2WSDL してそれを .NET に食わせればいける気はしますが,どっちみち外で作られた WSDL をベースにする場合はダメですよね.
どうしたものか悩んでいたら,どうやら Axis の WSDL2Java は WSDL から WSDD も生成してくれるんですね.な〜るほどぉ.そこには必要な情報が全部揃ってるもんなぁ.
そんなわけで (どんなわけで?),S2Axis では WSDL2Java を拡張した WSDL2JavaAndDicon (?) を提供することにしたいと思います.こいつは WSDL から TypeMapping を含んだ dicon ファイルを生成します.WSDL2Java は拡張できるように作られているので,WSDD を生成する JavaDeployWriter
をパクって JavaDiconWriter
を作って登録すればうまくいくはず.
たぶん WSDL2JavaAndDicon
は最後の方になると思うけど.(^^;