以下の手順で、Webサービスアプリケーションを作成してください。
サービスエンドポイントインタフェースは、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; }
iswsgen wsdlコマンドを使用してWSDLを生成します。“インタフェース名”には、1) サービスエンドポイントインタフェースの定義で作成したサービスエンドポイントインタフェースのクラス名を指定します。
iswsgenコマンドの詳細については、“リファレンスマニュアル(コマンド編)”のiswsgenコマンドを参照してください。
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 |
Webサービスエンドポイントは、Webサービスとして提供するWebサービスアプリケーションの処理ロジックを実装したJavaクラスです。
STATELESS Session Beanの場合、WebサービスエンドポイントはEnterprise Beanクラスです。
Webサービスアプリケーションの処理ロジックとして、以下の条件を満たすJavaクラスを作成します。Webサービスが呼び出されたときに、このJavaクラスのオブジェクトに対して、呼び出しに対応するメソッドが呼び出されます。
publicだが、finalおよびabstractでないクラス
publicデフォルトコンストラクタを持つ
finalize()メソッドを定義していない
WARファイルの場合、作成したサービスエンドポイントインタフェースを実装(implements)している
ejb-jarファイルの場合、サービスエンドポイントインタフェースの各メソッドの以下を満たすビジネスメソッド(注)がEnterprise Beanクラスに定義されている
同名
同数・同型の引数と復帰値である
サービスエンドポイントインタフェースと同一の例外をスローする
注) Enterprise Beanクラスに実装するビジネスメソッドについては“12.6 Enterprise Beanクラスの作成”の“ビジネスメソッドの規約”を参照してください。
初期化と後処理のカスタマイズが必要な場合
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(); }
ポイント
サービスエンドポイントインタフェースおよびWebサービスエンドポイントをコンパイルする際は、クラスパスおよびJava VMオプションに以下を設定してください。
C:\Interstage\J2EE\lib\isws.jar
/opt/FJSVj2ee/lib/isws.jar
-J-XX:EndorsedClassPath=C:\Interstage\J2EE\lib\isws-saaj-api.jar
-J-XX:EndorsedClassPath=/opt/FJSVj2ee/lib/isws-saaj-api.jar
添付ファイルを利用する場合や初期化と後処理のカスタマイズを行う場合には、上記に加えて以下もクラスパスに追加してください。
C:\Interstage\J2EE\lib\isj2ee.jar
/opt/FJSVj2ee/lib/isj2ee.jar