■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に付属するオンラインマニュアルをご覧ください。