Axis2と.NETの相互運用

かなり詰まってます。。。

どちらも単体だと動くので何か違いがあるはずとTCPMonitorを眺め続けるのであったが今のところ違いが分からない。

#WEB参照の追加で作成したクライアントでは正常にWEBサービスが呼べてて、WSDL2Javaで生成したAxis2のクライアントだとエラーになってしまう。セキュリティ関連でつまづいているのかコーディングが悪いのかぜんぜん分からな〜い。

#HTTPヘッダのSOAPActionの指定が関係しているのかなぁ?SOAP1.1からは必須の指定になったっぽいけど、Axisのスタブは勝手に付与はしてくれないらしい。AXIOMも同じく。

#AXIOMの場合はServiceClientクラスのsetOptionで指定するOptionクラスにsetActionメソッドがあって、そこでSOAPActionが指定できた。今はEclipseTPC/IP Monitorで正常に呼び出せる.NETクライアントのエンベローブとBAD REQUESTではじかれてしまうAxis Clientのエンベローブを比較して直接HTTPヘッダを書き換えながら問題の原因を特定中。

#原因判明!!HTTPヘッダにcontent-lengthが無いからだ。content-lengthを付けてやると正常に呼び出して戻ってくる。さてどうやって解決するかな?

#AXIOMのソース拾ってきて見たけどcontent-lengthを設定する方法が見つからない。SOAPOverHTTPSenderでrequestHeaderの設定をしているけど任意で設定するようなコードが見当たらない。そうなると自動で付加させるはずなんだけどHTTPConstants.HEADER_CONTENT_LENGTHを使ってる箇所が無い。ぜんぜん関係ない事をやっているような気がしてきた。そもそもcontent-lengthが必須の条件を正確に知らないということでHTTPの基礎からやりなおし!!これからgzipで圧縮した通信をしなきゃいけないし。

#って見てたソースがAXIOMじゃなくてAxis2のだったorz

#転送エンコーディングが自動的についてるから、content-lengthが付加されないような気がしてきた。でもchunkedになってるからこの場合はcontent-lengthって不要なんじゃ?などとHTTPの根幹の話になってきた…この辺はぜんぜん知らないから勉強だぁ!