ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

18.1.2 Webサービスアプリケーションを開発する

以下の手順で、Webサービスアプリケーションを作成してください。

1 Webサービスのインタフェースを定義する

1) サービスエンドポイントインタフェースの定義

サービスエンドポイントインタフェースは、Webサービスとして提供するWebサービスアプリケーションの公開インタフェースを定義する、Javaインタフェースです。

Webサービスアプリケーションのインタフェースとして、以下の条件を満たすJavaインタフェースを作成します。
このJavaインタフェースを作成することで、どのようなメソッドをWebサービスとして提供するかを定義します。

  • java.rmi.Remoteインタフェースを継承している。

  • メソッドはjava.rmi.RemoteExceptionをthrowする。

  • メソッドのパラメタ(引数・返り値)には、“18.3 Javaのデータ型とXMLのデータ型との対応”に示されたJavaデータ型だけを使用する。

  • メソッドのオーバーロード(メソッド名が同じで引数の数やデータ型のみ異なる複数のメソッドの定義)をしない。

  • メソッドのパラメタ(引数・返り値)にEJBObjectやEJBLocalObjectを含まない。

  • メソッドのパラメタ(引数・返り値)に使用する配列型のデータや、構造体型・Bean型のメンバにEJBObjectや EJBLocalObject、EJBアプリケーションのLocalインタフェース、Remoteインタフェース、Local Homeインタフェース、Remote Homeインタフェース、Timerインタフェース、TimerHandleインタフェース、CMPのfinderメソッドの復帰値のCollectionを含まない。

また、WebサービスとRMIoverIIOPの双方から呼び出されるSTATELESS Session Beanを作成する場合には、Remoteインタフェース/Homeインタフェースとサービスエンドポイントインタフェースの両方を作成してください。
Webサービスからのみ呼び出されるSTATELESS Session Beanの場合には、サービスエンドポイントインタフェースのみ用意する(Remoteインタフェースなどを用意しない)ことも可能です。

WebサービスとしてStringを引数に取りfloatを返す、getLastTradePriceというメソッドの例です。

package com.example;
public interface StockQuoteProvider extends java.rmi.Remote {
     float getLastTradePrice (String tickerSymbol) throws java.rmi.RemoteException;
}
2) WSDLの生成

iswsgen wsdlコマンドを使用してWSDLを生成します。“インタフェース名”には、1) サービスエンドポイントインタフェースの定義で作成したサービスエンドポイントインタフェースのクラス名を指定します。

iswsgen wsdl [オプション] "インタフェース名"

コマンド実行後、以下のファイルが生成されます。

  • WSDLファイル
    Webサービスのインタフェース情報が定義されています。ただし、接続先のURL情報はデフォルトでは、仮の値が記述されています。WebサービスアプリケーションをIJServerに配備したあと、正しいURL情報が記述されたWSDLファイルを取得できます。

  • <WSDLファイル名>_mapping.xml
    最後にパッケージングする時に、アプリケーションとともに含めます(プロトコル(SOAP)で使用するXMLとアプリケーションの対応付けが記述されています)。

WARファイルの場合

iswsgen wsdl com.example.StockQuoteProvider

ejb-jarファイルの場合

iswsgen wsdl -module ejb com.example.StockQuoteProvider

2 Webサービスエンドポイントを実装する

Webサービスエンドポイントは、Webサービスとして提供するWebサービスアプリケーションの処理ロジックを実装したJavaクラスです。
STATELESS Session Beanの場合、WebサービスエンドポイントはEnterprise Beanクラスです。

Webサービスアプリケーションの処理ロジックとして、以下の条件を満たすJavaクラスを作成します。Webサービスが呼び出されたときに、このJavaクラスのオブジェクトに対して、呼び出しに対応するメソッドが呼び出されます。

初期化と後処理のカスタマイズが必要な場合

WARファイルの場合、Webサービスエンドポイントでインタフェースを実装することで、起動時の初期化・終了時の後処理が定義できます。

 package javax.xml.rpc.server;
 public interface ServiceLifecycle {
   public void init(Object context) throws javax.xml.rpc.ServiceException;
   public void destroy();
 }

JAX-RPC Service Endpointのインスタンス化時にinitメソッドが呼び出され、インスタンスが解放されるときにdestroyメソッドが呼び出されます。
initメソッドのパラメタには、下記のServletEndpointContextオブジェクトが渡されます。

 package javax.xml.rpc.server;
 public interface ServletEndpointContext {
   public java.security.Principal getUserPrincipal();
   public javax.xml.rpc.handler.MessageContext getMessageContext();
   public javax.servlet.http.HttpSession getHttpSession();
   public javax.servlet.ServletContext getServletContext();
 }