Shammer's Philosophy

My private adversaria

AxisでWebサービス

最近、というかこれからWebサービスの利用がもっと身近になるだろうなぁ、という予測から、Axisをちょっと使ってみた。これは、Tomcatなどのコンテナと違って、独自のプロセスで動作するわけではなく、すでにコンテナとして動いているものに「Webサービスエンジン機能」を追加するという仕組みのようだ。Webサービスエンジンがアプリケーションとコンテナの間で動作しているっぽい。
結局のところ、アプリケーションのやり取りする階層が一つ増えているというだけのようだ。Webコンテナは、HTTPのリクエストからJavaプログラムを呼び出すための仕組み(Servlet)。Webサーバが解釈するURIは、通常はHTMLや画像など固定の情報を検索するが、Webコンテナの場合はURIに紐付いたServletJSP含む)を起動する。ユーザーに返るのはHTMLの情報。つまり、

  1. WebサーバーがHTTPリクエストを受け取る
  2. HTTPリクエストからURIを取り出し、該当するHTMLや画像情報を探す
  3. 合致する情報があればそれをリクエスタに返す
  4. ブラウザはHTMLをレイアウトして画面に表示する

というのがWebサーバーの動き。それに対してWebコンテナは、

  1. HTTPリクエストを受け取る
  2. URIを取り出し、該当するServletJSPを探す
  3. 合致する情報があれば、そのServletJSPがHTMLを生成する
  4. 生成されたHTMLがリクエスタに返される
  5. ブラウザはHTMLをレイアウトして画面に表示する

という動き。人間が見ただけでは単なる文字列だが、HTMLはブラウザにとっては意味のある情報。同じく、Webサービスでやり取りされるSOAPメッセージも同様だろう。ブラウザからWebサービスが呼び出されるアプリケーションを考えると、

  1. ブラウザがHTTPリクエストをWebサーバー(コンテナ)へ投げる
  2. WebコンテナはHTTPリクエストのURIを解釈する
  3. URIに応じたServletが呼び出される
  4. ServletSOAPクライアントを呼び出してSOAPリクエストを生成
  5. 生成されたSOAPリクエストがWebサービスに投げられ、SOAPレスポンスを受け取る
  6. SOAPクライアントはSOAPレスポンスを翻訳してServletに解釈できる形で応答を返す
  7. Servletは受け取った応答をもとにHTMLを生成しブラウザへそれを返す
  8. ブラウザは受け取ったHTML文字列をレイアウトして画面に表示

あくまで正常系の動きだが、やっていることはこれまでの仕組みに一つ新しいレイヤーが加わったというだけのこと。とりあえず新しく覚えなければならないのは、SOAPクライアントの呼び出し方というところだろうか。通常はWSDLを使うことになるだろうけれど、WSDLは必須というわけでもないようだ。