ライフログに公開している「図解標準 最新Webサービス マスタリングハンドブック」を参考に、Webサービスの実装を試してみた。
AXIS、Tomcat、JDKは本で扱っているものより最新のバージョンで試したが、基本的にやることは本の内容と変わりない。
【概要】
Tomcat 5.5.27 ⇒ Webサービスを公開するプロバイダ
AXIS ⇒ Tomcat のWebアプリケーションとしてデプロイし、Webサービスのミドルウェアとして動作
AXISをTomcatにデプロイし、WebサービスへのリクエストはAXISのサーブレットが受け付ける。
SOAP on HTTP のリクエストを受け付けたAXISのサーブレットは、SOAPを解析し、Webサービスの
実体であるビジネスロジックを実行する。
実行結果も同じくSOAP on HTTPでレスポンスを返す。
【もうちょっと詳しく】
実体であるビジネスロジックとは、Javaクラスのメソッドで実装する。
例えば、以下のようなクラスがあるとしよう。
---------------------------------------------------
public class HelloWorld(){
public String sayHello(){
return "Hello!";
}
}
---------------------------------------------------
このJavaクラスを、AXISのデプロイ先のclassesディレクトリ以下に配置する。
これだけではAXISはこのクラスを認識できないでいるので、Java2WSDLを使って、
このJavaクラスのメソッドをサービスとして公開する。
サービスとして公開するための情報として、「なんていう名前のサービスでどのJavaクラスのどのメソッドを公開するか」をWSDDというファイルに定義してあげる。そして、そのWSDDファイルをJava2WSDLで指定すると、晴れてAXISは上のJavaクラスを認識し、WSDDで指定したメソッドをサービスとして公開できる。
WSDDファイルに定義した情報は、この時AXIS側のWSDDファイルに登録される。
こうして公開したWebサービスをどうやってリクエストするかは、そのURLやサービス名や、リクエストの方法などを定義したWSDLから判断する。
AXISにデプロイ済みのWebサービスに対して、ブラウザから以下のURLにアクセスすると、レスポンスとしてWSDLが返される。
「http://hostname/axis/services/urn:HelloWorld?wsdl」
このWSDLは、AXISのエンジンで自動的に生成してくれるものである。
このWSDLの情報を元に、Webサービスのクライアントプログラムを実装していく。
が、WSDLに書かれている内容を細かく理解した上でプログラミングする必要はない。
AXISにはWSDLからJavaのスケルトンを生成してくれるツール(WSDL2Java)が用意されている。
WSDL2Javaを用いてWSDLの情報を元にスタブと呼ばれるクラス群を生成し、クライアントプログラムでそれらのクラスを利用するようにプログラミングすることで、簡単なWebサービスクライアントを作成できる。