■Webサービスの作成
Webサービスは、図のようにSOAP通信をするためのライブラリを使って通信します。
では、Webサービスを開発していきましょう。これから行っていく作業手順は、次のようになります。
1.サービスのコードを作成する |
■サービスのコードを作成する
まずは実際にサービスを提供するコードを作成します。ここでは、引数なしの呼び出しに対して文字列 "HelloWorld" を返すサービスの作成について考えてみましょう。
public class SampleService { public String helloworld() { return("HelloWorld \n"); } } |
このようにコードを作成し、コンパイルしておきます。
javac SampleService.java |
■Webアプリケーションとしてまとめる
サービスのコードを作成したら、今度はそのサービスをWebアプリケーションとしてまとめます。
WebOTX Webサービスでは、あらかじめWebサービスに対応したWebアプリケーションを作るためのテンプレートを用意していますので、それを利用します。Webアプリケーションとしてまとめる作業は、次のような手順で行います。
・soap_base.war (Webアプリケーションテンプレート) を展開する |
■soap_base.war (Webサービス作成用テンプレート) を展開する
soap_base.warファイル (Webサービス作成用テンプレート) を、JARコマンドを利用して任意のディレクトリに展開します。以降、C:\temp配下に展開するものとして説明します。
C:\temp>jar xvf <InstallDIR>/webservice/webapps/soap_base.war |
※<InstallDIR>は、WebOTXのインストールディレクトリです。以降の説明でも同様です。
展開すると、次のようなテンプレートがあらわれます。
classes配下にサービスとなるファイルを格納し、DeployedServices.xmlファイルを編集するだけで、Webサービスを作成することができます。
+ |---- soap.xml , DeployedServices.xml | +WEB_INF |---------- web.xml | +classes | | +lib |---------- soap.jar |
■作成したサービスを格納する
次のように、展開したテンプレートのclasses配下に、作成したサービスを格納します。
C:\temp>copy <サービスをコンパイルしたディレクトリ>\SampleService.class WEB_INF\classes |
SampleService.classの格納後は、次のような構成になります。
+ |---- soap.xml , DeployedServices.xml | +WEB_INF |---------- web.xml | +classes |---------- SampleService.class | +lib |---------- soap.jar |
■DeployedServices.xml (サービスの構成情報) を記述する
展開したテンプレートに含まれる「DeployedServices.xml」ファイルを編集します。サービスの構成情報は、あらかじめ書かれているdeployedServices要素の中に定義します。一つのサービスにつき、一つのservice要素で囲みます。
今回、作成しているアプリケーションでは、次のように記述します。
<deployedServices> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="SampleService"> <isd:provider type="java" scope="Request" methods="helloworld"> <isd:java class="SampleService"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> <deployedServices> |
青字になっているところが、このサービス固有の値です。provider要素の中に、サービスのクラスとメソッドを指定していることがわかります。idには、ユニークなサービス名を指定しますが、ここではSampleServiceを指定しました。この値は、クライアントからアクセスする時のkeyになります。
■Webアプリケーションとしてまとめ直す
これまで展開して加工したテンプレートを、再びJARコマンドを使ってWARファイルにまとめ直し、Webアプリケーションの形にします。
テンプレートを展開したルートディレクトリで、次のようにコマンドを実行してWebアプリケーションを作成してください。
C:\temp>jar cvf hello.war *.* |
これで、Webサービスに対応したWebアプリケーションの作成が終わりました。
■Webサービスの公開
では、Webサービスをクライアントから利用できるように公開しましょう。作成したWebアプリケーションを、Webコンテナに転送して配備することで公開します。
■Webコンテナに転送・配備する
Webアプリケーションを動作させるWebコンテナとWWWサーバを起動します。
ブラウザで次のURLにアクセスし、Webコンテナの管理コンソールを起動します。
http://<ホスト名>:<ポート番号>/manager ・・・・・・・・・・・・・インストールしたWebコンテナのバージョンが4.0.2の場合 http://<ホスト名>:<ポート番号>/admin ・・・・・・・・・・・・・・・インストールしたWebコンテナのバージョンが3.2.3の場合 |
管理コンソールにアクセスすると、最初にログイン画面になります。
ログインすると、管理コンソールが表示されます。
管理コンソールが起動したら、「WebAP管理」の「転送」を選択します。
WARファイル・・・・・・C:\temp\hello.war (作成したWARファイルの格納場所を指定)
URL・・・・・・・・・・・・・/hello (このWebアプリケーションのURLを指定)
ここでは同時に配備も行うにチェックを入れ、転送をクリックします。
Webコンテナに作成したWebアプリケーションが転送・配備されます。最後に、Webコンテナ、Webサーバを再起動してください。
再起動は、Webコンテナで新規に作成したWebアプリケーションのURLを、Webサーバに反映させるために行います。
これでWebサービスの公開が終わりました。
■クライアントの作成・実行
では、Webサービスを利用するクライアントを作成しましょう。
■クライアントコードの作成
Webサービスにアクセスするクライアントコードを次のように作成します。
import java.io.*; import java.net.*; import java.util.*; import org.apache.soap.*; import org.apache.soap.rpc.*; public class SampleClient { public static void main (String[] args) throws Exception { String sturl = "http://localhost/hello/servlet/rpcrouter"; if(args.length > 1) sturl = args[0]; //callオブジェクトの作成 // サービス名(TargetObjectURI)、メソッド名、EncodingStyleURI(固定値)をセット Call call = new Call (); call.setTargetObjectURI ("SampleService"); call.setMethodName ("helloworld"); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); //呼び出し、レスポンス取得、SOAP Faultのハンドリング URL url = new URL(sturl); Response resp = call.invoke (url,"soap_action" ); if(resp.generatedFault()){ Fault fault = resp.getFault (); System.out.println ("SOAP Fault Code = " + fault.getFaultCode ()); System.out.println ("SOAP Fault String = " + fault.getFaultString ()); }else{ Parameter result = resp.getReturnValue (); Object res_value = result.getValue(); System.out.println ("Return value = "+ res_value); } } } |
次に、クライアント用のライブラリ(wowscl.jar)をクラスパスに追加してください。
set CLASSPATH=<InstallDIR>\WebService\lib\wowscl.jar;%CLASSPATH% |
クラスパスを追加した環境で、次のようにコンパイルを行います。
javac SampleClient.java |
■クライアントアプリケーションの実行
作成したクライアントアプリケーションを実行させる前に、クライアントアプリケーションを実行するディレクトリが、クラスパスに追加されているかを確認してください。追加されていない場合は、次のようにして実行するディレクトリをクラスパスに追加します。
set CLASSPATH=.;%CLASSPATH% |
クライアントアプリケーションを実行します。
java SampleClient |
これはサーバとクライアントを1台のマシンにしてテストする時の方法です。サーバマシンとクライアントマシンを別にする時は、サーバの動作しているホスト名を指定したURLで実行します。
java SampleClient http://<ホスト名>/hello/servlet/rpcrouter |
正常に動作すると、次のように表示されます。
Return value = HelloWorld |
サーバ・クライアント間に流れているSOAPメッセージを確認したい場合や、通信ログを採取する場合は、サーバマシンで次のコマンドを使ってTCP Tunnel Monitorを起動してください。
<InstallDIR>\WebService\tools\tunnel |
TCP Tunnel Monitorの初期設定では、ポート8080番でクライアントと通信し、ポート80番でサーバと通信するようになっているので、クライアントからアクセスするポート番号を8080に変えて実行します。
java SampleClient http://localhost:8080/hello/servlet/rpcrouter |
これで、WebOTXを使ったWebサービスの作成は終了です。なお、詳細については、WebOTXに付属するオンラインマニュアルをご覧ください。