![]() ![]() ![]() ![]() ![]() |
チュートリアル : WEBサービスの操作 05/19/03 09:50:45 |
このレッスンでは、WebサービスのWARプロジェクトをセットアップし、Web Serviceウィザードを実行してサービスのSOAP処理コードを生成する方法について学習します。 サービスのユーザによって呼び出されるメソッドを実装するJavaクラスのみを提供する必要があります。このサンプルでは、これは、add、subtract、multiply、およびdivideという単純なメソッドを使用するCalculatorです。 その後、Calculator Webサービスを配備し、ウィザードにより提供されたテストツールを使用して、このサービスをテストします。
注記: このレッスンで作成するWebサービスを配備するには、J2EEアプリケーションサーバを実行する必要があります。
Webサービスは、リモートサーバで使用可能なコンポーネントです。 そのインタフェースは既知であり、標準化されたメッセージプロトコルを介してメソッドを呼び出すことができます。
J2EEの環境では、WebサービスをJ2EEアプリケーションサーバでWAR (Web Archive)にサーブレットとして配備することで、Webサービスが使用できるようにします。 クライアントアプリケーションは、SOAP XMLメッセージを使用してリモートメソッド呼び出しを行います。 リモートサーバのSOAP Dispatcherは、メッセージを受信し、Webサービスサーブレットにメソッド呼び出しを送ります。 Webサービスは、SOAPメッセージとして戻される値を折り返し、クライアントに送信し直します。
Novellでは、 JAX-RPC (Java API for XML-based RPC)およびRMI (Java Remote Method Invocation)に基づく、Webサービスを開発するためのJ2EEモデルをサポートしています。 ビジネスメソッドのシグネチャは、リモートインタフェースで宣言されます。 サービスではスケルトンクラスを使用し、またクライアントではスタブクラスを使用して、サービスとクライアントアプリケーション間での通信を管理します。
スケルトンおよび結合 Webサービスのスケルトンクラスは、リモートインタフェースを実装します。 スケルトンは、SOAPリクエストの受信、XMLからJavaデータタイプへの引数の変換、およびビジネスメソッドの呼び出しを行います。 Webサービスには、スケルトンを拡張し、ビジネスメソッドを実装する別のクラスに、メソッド呼び出しを委任する結合クラスも含まれます。
スタブ クライアントアプリケーションでは、リモートインタフェースも同様に実装するスタブクラスを使用します。 クライアントがリモートインタフェースで定義されたメソッドを呼び出した場合、スタブは保存しているURLを使用して呼び出しをWebサービスに送信し、メソッド呼び出しをSOAPメッセージとして転送します。
これらのクラスの実装の詳細について心配する必要はありません。Novellでは、このコードを生成するツールを提供しています。
Workbench Novell exteNd Workbenchでは、Webサービスとクライアントアプリケーション間での通信に対してコードを生成するWeb Serviceウィザードを用意しています。 Webサービスでは、ビジネスメソッドのコードのみを提供する必要があります。 Webサービスを呼び出すクライアントでは、WebサービスをXMLで記述したWSDLファイルから、コードを生成できます。
jBroker Web jBroker Webは、J2EEアプリケーションサーバ上でのWebサービスに対して、コンパイラおよびランタイムサポートを提供するJAX-RPC実装です。 これは、Workbenchに含まれ、Web Serviceウィザードでこのコンパイラを使用して、Webサービスコードを生成します。 配備したアプリケーションには、jBroker Webおよび関連するAPI JARへのアクセスが必要となります。
jBroker Webには、コンパイラを直接呼び出すコマンドラインツールが含まれていますが、このツールは、このチュートリアルでは使用しません。 詳細については、 jBroker Webヘルプを参照してください。
このレッスンの残りでは、プロジェクトのセットアップ、ウィザードを使用したコードの生成、および結果の配備とテストについて示しながら、Webサービスを作成する方法について説明します。
WorkbenchのWeb Serviceウィザードは、使用可能にするビジネスメソッドを実装したり、定義したりするソースオブジェクトで開始します。 このプロセスには、いくつかの開始点が考えられます。 可能な開始点は、次のとおりです。
Calculator Webサービスでは、基本的な算術のメソッドを定義するCalculatorImplクラスを使用します。 また、0で除算する場合の例外を処理するDivideFaultクラスも使用します。
この節では、Calculator WebサービスのWARプロジェクトを作成します。 まず、ディレクトリを簡単にセットアップします。 その後、Workbenchを起動してプロジェクトファイルを作成し、プロジェクトにCalculatorImpl.javaを追加します。
このエクササイズでは、ソースファイルのディレクトリを作成します。
ご使用のオペレーティングシステムのツールを使用して、CalculatorWSというプロジェクトのルートディレクトリを作成します。 ディスクドライブのルートレベル、または選択したサブディレクトリに配置できます。 チュートリアルのサンプルパスでは、WorkbenchProjectsディレクトリにCalculatorWSを作成したことを想定しています。 Windowsでは、次のようになります。
c:\WorkbenchProjects\CalculatorWS
CalculatorWSディレクトリで、srcというサブディレクトリを作成し、srcディレクトリでcalcというパッケージサブディレクトリを作成します。
ファイルCalculatorImpl.javaおよびDivideFault.javaを、Workbench-install-dir\docs\tutorial\TutorialFiles\webservicesディレクトリから、CalculatorWS\src\calcプロジェクトディレクトリにコピーします。
WorkbenchProjects\CalculatorWS\src\calc
このエクササイズでは、Workbenchを起動しNew Projectウィザードを使用して、Calculator Webサービスのプロジェクトを作成します。
Workbenchを開始します。 Windowsの[スタート]メニューからNovell exteNd Workbenchのショートカットを使用できます。またはWorkbenchがすでに実行されており、プロジェクトが開いている場合は、メニューから[File]>[Close Project]の順に選択します。 開いているファイルを閉じるよう求められた場合、[Yes]をクリックします。
New Projectウィザードで、[WAR]を選択してから[OK]をクリックします。
[Project Location]フィールド横の省略記号をクリックして、 エクササイズ 2-1: プロジェクトのディレクトリをセットアップするで作成したCalculatorWSディレクトリを選択します。 [OK]をクリックすると、ダイアログボックスの残りのフィールドが自動的に記入されます。
[Project J2EE Version]フィールドで、[J2EE 1.2 (WAR 2.2)]を指定して、J2EE 1.2または1.3をサポートしている任意のサーバでアプリケーションが実行されるようにします。
ウィザードによりWEB-INFディレクトリを作成するかどうか尋ねるメッセージが表示されたら、[Yes]をクリックします。
ウィザードにより、プロジェクト情報が要約されます。
注記: [New Project]の選択時に別のプロジェクトが開いていた場合、そのプロジェクトを現在のプロジェクトに追加することについて、パネルが表示される場合があります。 その場合、[Add this project]オプションはオンにしないようにします。 [Next]をクリックして、[Summary]パネルに移動します。
ナビゲーションペインで、[Project]タブに新しいプロジェクトが表示されます。 ソースレイアウトビューまたはアーカイブレイアウトビューのいずれかを使用できます。
このエクササイズでは、srcディレクトリをプロジェクトに追加し、J2EEアーカイブでの場所を指定します。
[Add to Project]ダイアログボックスで、[Add the files to the archive at thislocation]をオンにします。 テキストボックスに、「WEB-INF/classes」と入力します。 [Include subdirectories]はオンのままにします。
Webサービスでは、jbroker-web.jarのクラスおよびSOAPメッセージ処理のサポートJARを使用します。 このエクササイズでは、これらのJARをランタイム時のアクセス用にアーカイブに追加し、コンパイル時のアクセス用にプロジェクトクラスパスに追加します。
[Select Contents]ダイアログボックスで、Workbench-install-directory/compilelibディレクトリに移動した後、次のファイルを選択して[Open]をクリックします。
[Add to Project]ダイアログボックスにより、各ファイルの情報を1つずつ入力するよう求められます。
jaxrpc-api.jarの情報を求められた場合、[Add the file to the archive at this location]をオンにします。 テキストボックスに、「WEB-INF/lib/jaxrpc-api.jar」と入力します。 その後、[OK]をクリックします。
jbroker-web.jarの情報を求められた場合、[Add the file to the archive at thislocation]をオンにします。 テキストボックスに、「WEB-INF/lib/jbroker-web.jar」と入力します。 その後、[OK]をクリックします。
saaj-api.jarの情報を求められた場合、[Add the file to the archive at this location]をオンにします。 テキストボックスに、「WEB-INF/lib/saaj-api.jar」と入力します。 その後、[OK]をクリックします。
xerces.jarの情報を求められた場合、[Add the file to the archive at this location]をオンにします。 テキストボックスに、「WEB-INF/lib/xerces.jar」と入力します。 その後、[OK]をクリックします。
これで、アーカイブのWEB-INF/libディレクトリに、JARが含まれます。
[Add to Classpath]ダイアログボックスで、Workbench-install-directory/compilelibディレクトリをもう一度検索し、次のファイルを選択して[Open]、[OK]の順にクリックします。
[Classpath/Dependencies]タブは、次のようになります。
[OK]をクリックして、[Project Settings]ダイアログボックスを閉じます。
これで、プロジェクトに必要なJARへの参照が含まれます。 アーカイブを作成すると、これらのJARが含まれることになります。 また、JARはアーカイブ作成用のクラスパスにも含まれています。
ナビゲーションペインで、[Project]タブを選択し、プロジェクトのコンテンツを表示します。 [Source layout]を選択して[src]を展開し、[calc]ディレクトリを選択します。 ここには、CalculatorImpl.javaおよびDivideFault.javaが含まれます。[Workbench-install-directory/compilelib]エントリをクリックして、下部ペインにjbroker-web.jarおよび他のJARを表示します。
展開したソースレイアウトは、次のようになります。
Web Serviceウィザードでは、コンパイル済みのファイルを使用するため、プロジェクトを作成してから呼び出す必要があります。
メニューから[Project]>[Build]の順に選択します。
エラーが表示された場合は、おそらくクラスパスに問題があります。 エクササイズ 2-4: jBroker Webライブラリをプロジェクトに追加するを正しく完了していることを確認してください。
ソースオブジェクトをWebサービスに変換するには、Web Serviceウィザードを実行します。 このウィザードでは、サーバでXML SOAPリクエストをソースオブジェクトに対するメソッド呼び出しに変換できるコードが生成されます。
ヒント: Web Serviceウィザードでは、開いているプロジェクトが要求され、 このプロジェクト に生成したファイルが挿入されます。
WebサービスのURLについて ウィザードを実行する際に指定する情報の1つに、クライアントがサービスへのアクセス時に使用するURLがあります。 URLは、いくつかの部分から構成されています。
たとえば、このWebサービスをローカルNovell exteNd Application Serverに配備すると、URLは次のようになります。
http://localhost:80/ProverbsCloud/Calculator/CalculatorImpl
このエクササイズでは、CalculatorImplをWebサービスに変換するクラスを生成します。
[New File]ダイアログボックスで、[Web Services]タブを選択してから、[New Web Service]を選択して[OK]をクリックします。
Workbenchに、Web Serviceウィザードのプロジェクトの場所を指定するパネルが表示されます。
このパネルでデフォルトを受け入れるか(次を参照)、[Next]をクリックできます。
クラス選択パネルが表示されたら、[class calc.CalculatorImpl]を選択して、[Next]をクリックします。
注記: デフォルトでは、ウィザードにより、プロジェクトのコンパイル済みクラスが表示されます。 オプションで、(アーカイブなど)他の場所に保存されたクラスのリストを表示し、リストをフィルタ処理して特定の種類のクラスのみを表示することができます。
メソッド選択パネルが表示されたら、[Add All]をクリックして4つのCalculatorメソッドをすべて使用します。 [Next]をクリックします。
クラス生成およびSOAPオプションパネルが表示されます。
[Service address]テキストボックスで、クライアントがサービスへのアクセス時に使用するURLを指定します。
URLは、配備サーバに応じて異なります( WebサービスのURLについてを参照)。 たとえば、www.mydomain.comでNovell exteNd Application ServerのProverbsCloudデータベースに配備したアプリケーションのURLは、次のとおりです。
http://www.mydomain.com/ProverbsCloud/Calculator/CalculatorImpl
ウィザードを実行すると、プロジェクトのcalcディレクトリに複数のファイルが追加されます。 これらのファイルは、ウィザードによりプロジェクトディレクトリに追加されるため、自動的にプロジェクトの一部になります。
ウィザードですべての生成オプションをオンにすると、次のファイルがプロジェクトに含まれます。 Javaファイルは、calcパッケージディレクトリ内にあります。
「Delegatorクラス」のCalculatorImplWSDelegateおよびCalculatorImplWSTieは、連係してソースオブジェクトをSOAP処理オブジェクトにバインドします。 Webサービスを生成するために、編集を行う必要はありません。
「バインド」は、WebサービスにアクセスするためのURLであり、スタブでのコードの一部です。 スタブをインスタンス化するクライアントコードで、このURLを上書きできます。
注記: ウィザードをもう一度実行すると、これらのファイルはすべて再生成されます。 そのため、コードを変更しなければならない場合は、生成されたコードを編集する代わりに、Delegatorクラスを拡張するクラスを定義することをお勧めします。
ビジネス論理が記述されていない場合 実装の代わりにインタフェースでこのプロセスを開始した場合、つまり、CalculatorImpl.javaファイルが存在せずCalculatorImplWS.javaファイルのみがある場合は、この時点でビジネス論理を記述する必要があります。 CalculatorImplWSTieまたはCalculatorImplWS_ServiceTieSkeletonを拡張して、そこでビジネス論理を実装するか、別のクラスを記述して、CalculatorImplWSTieのターゲットがこのクラスを参照するよう設定できます。
Workbenchでは、任意のJ2EEアプリケーションサーバのアーカイブを作成して、配備できます。 ここでの手順では、このチュートリアルアプリケーションを配備する場合に必要な情報について示します。 詳細およびサーバ固有の情報については、「 Workbenchの配備手順」を参照してください(独自のサーバツールを使用して配備することもできます)。
プロジェクトを作成した際に、Workbenchで、選択したアーカイブのタイプに適するXML記述子ファイルが作成されました。 WARでは、このファイルはweb.xmlと呼ばれます。
web.xmlを編集用に開くと、配備記述子エディタにより、XML要素が展開可能なツリー構造で表示されます。 また、加工されていないXMLを表示することもできます。 エディタでは、プロジェクトのコンパイル済みコードを使用して、表示する内容を決定します。アーカイブを最初に作成するのはこのためです。 アーカイブをまだ作成していない場合は、Workbenchによるアーカイブの作成が提示されます。
このエクササイズでは、生成されたWSDLファイルをアーカイブのルートに含め、アーカイブを作成します。 レッスン 5, テスト方法では、WSDLファイルを含める理由について説明します。
[Add to Project]ダイアログボックスで、プロジェクトルート下でsrcディレクトリを検索し、[CalculatorImplWS.wsdl]を選択してから[Open]をクリックします。
2番目の[Add to Project]ダイアログボックスで、[Add the file to the root of the archive]をオンにして[OK]をクリックします。
Workbenchで、メニューから[Project]>[Build and Archive]の順に選択して、プロジェクトに対して配備可能なアーカイブを作成します。
ウィザードは、Webサービスのメインサーブレットに関する情報を配備記述子に挿入します。 このエクササイズでは、その情報を確認して、今後必要が生じた場合にその情報を検索したり、変更したりできるようにします。
ナビゲーションペインで、プロジェクトファイルCalculator.spfを右クリックして、ポップアップメニューから[Open Deployment Descriptor]を選択します。
注記: ソースビューまたはアーカイブビューでweb.xmlを検索し、ダブルクリックして開くこともできます。
Workbenchで[Select Build Option]ダイアログボックスが表示された場合、デフォルトを受け入れて[OK]をクリックします。
Workbenchにより、編集ペインでweb.xmlが開きます。 エディタには、[Descriptor]タブが表示され、記述子に含めることができる情報のタイプが示されます。
[CalculatorImpl]を右クリックして、ポップアップメニューから[Properties]を選択します。
プロパティシートに、サーブレットの配備プロパティが表示されます。
[Servlet class]の値は、[calc.CalculatorImplWSTie]になっています。 これは、Webサービスの呼び出し時に実行するクラスです。
再び編集ペインで、[Servlet Mapping]セクションで[CalculatorImpl]項目を検索して選択します。
今度はプロパティシートに、マッピングプロパティが表示されます。
[URL pattern]の値は、サーブレットの名前と同様に「CalculatorImpl」です。 この値は、WebサービスにアクセスするURLで使用します。
エディタの右上隅にあるボタンをクリックするか、メニューから[File]>[Close]の順に選択して、配備記述子を閉じます。
別のWorkbenchチュートリアルを完了している場合、ほとんどの配備設定はすでに完了しています。 このエクササイズでは、主な手順について説明し、このプロジェクトを配備する場合に必要なプロジェクト固有の情報を提供します。 すべてのサポートされたサーバに対する配備手順の詳細については、「 Workbenchの配備手順」を参照してください。
サーバのプロファイルを作成していない場合は、この時点でメニューから[Edit]>[Profiles]の順に選択して作成します。
詳細については、配備手順で「
サーバプロファイルの手順」を参照してください。
次の情報を使用して、配備プロセスのサーバ固有の部分を作成します。
大部分のJ2EEサーバでは、サーバ固有の配備情報は、通常XML形式で別のファイル内に保存されています。 一部のサーバでは、配備情報をプロジェクトに追加して、配備情報がアーカイブ内に組み込まれるようにする必要があります。
詳細情報および詳細な手順を示したエクササイズについては、配備手順で
ご使用のサーバの節を参照してください。
メニューから[Project]>[Deployment Settings]の順に選択して、サーバの配備設定を指定します。
[Server Profiles]タブで、前で定義したサーバプロファイルを選択します。 セキュリティ保護されたサーバを使用している場合は、[User name]および[Password]の値を指定します。
[Deployment Info]タブで、追加のアプリケーション固有の情報を次のように指定します。
注記: このチュートリアルでは、[Enable Rapid Deployment]チェックボックスはオンにしないようにしてください。 サーバでの高速配備の使用法の詳細については、『ツールガイド』の「 アーカイブ配備」を参照してください。
サーバ |
オプションおよび値 |
---|---|
Novell exteNd Application Server(またはSilverStream eXtend Application Server) |
[Deployment Plan] - Step 2で定義した計画を選択します。 [Overwrite existing deployment] - オン [Verbosity] - 3 [Ignore JSP compile errors] - オフ(配備時にJSPページが正常にコンパイルされない場合、アーカイブを配備しない) |
Sun Reference Implementation |
- |
Jakarta Tomcat |
- |
BEA WebLogic |
[WebLogic Application Name] - Calculator。WebアプリケーションにアクセスするためのURLで使用します。 |
IBM WebSphere |
[Node Name] - 空白のまま残すか、サーバでセットアップしたノードを指定します。 |
Oracle9iAS |
[Deployment Name] - Calculator。WebアプリケーションにアクセスするためのURLで使用します。 [Target Path] - 空白のまま残すか、サーバでセットアップしたパスを指定します。 [Website Name] - デフォルト値を受け入れるか、サーバでセットアップした名前を指定します。 |
詳細については、配備手順で
ご使用のサーバの節を参照してください。
[Deployment Settings]ダイアログボックスで[Deploy]をクリックします。
または
[Deployment Settings]で[OK]をクリックし、メニューから[Project]>[Deploy Archive]の順に選択します。
Workbenchで、[Output]ペインの[Deploy]タブに進行状況を知らせるメッセージ、エラー、および警告が表示されます。
ヒント: 大部分のサーバタイプでは、サーバが実行されていない場合、完全配備は失敗 します。 一部のサーバでは、配備後サーバを再起動する必要があります。 詳細については、 配備手順で ご使用のサーバの節を参照してください。
Webサービスを実行する前に、実行しなければならない作業がもう一つあります。配備したWARが、jBroker Webで必要な次のアーカイブにランタイムでアクセスできることを確認する必要があります。
このアクセスの設定方法は、使用するJ2EEサーバのタイプに応じて異なります。
次のいずれかのサーバに配備した場合、必要なJARをサーバのクラスパスに追加する必要があります(クラスパスへの追加の詳細については、ご使用のサーバのマニュアルを参照してください)。
Novell exteNd Application Serverに配備した場合は、サーバのクラスパスにJARを追加する必要はありません(このサーバでは、JARがWARのWEB-INF/libディレクトリ内にあるだけで十分です)。
Web Serviceウィザードは、Webサービスをテストする目的でJavaクラスを生成します。 テンプレートコードに変更を加えた後、プログラムを実行して、処理される内容を確認できます。
ナビゲーションペインで、CalculatorImplWSClient.javaを検索し、ダブルクリックしてエディタ内に開きます。 これは、ソースレイアウトではsrc/calcディレクトリ下、アーカイブレイアウトではWEB-INF/classes/calcディレクトリ下にあります。
process()メソッド内で、4つのコメント付きのSystem.out.println()ステートメントを次のコードで置き換えます。 getRemote()への呼び出しは削除しないでください。
この新しいコードは、コマンドラインから引数を取得して(またはデフォルト値を使用して)、CalculatorImplメソッドを呼び出します。
double x, y; if (args.length == 2) { x = new Double(args[0]).doubleValue(); y = new Double(args[1]).doubleValue(); } else { x = 4.0; y = 5.0; } System.out.println("Add = " + remote.add(x, y)); System.out.println("Divide = " + remote.divide(x, y)); System.out.println("Multiply = " + remote.multiply(x, y)); System.out.println("Subtract = " + remote.subtract(x, y));
メニューから[Project]>[Run Web Service Client Class]の順に選択します。
[Web Service Wizard Client Runner]ウィンドウの選択リストに、テストクライアントクラスが表示されます。 プロジェクトにmain()メソッドを使用した他のコンパイル済みクラスが含まれる場合、それらのクラスも表示されます。
[Arguments]テキストボックスに、Calculatorの算術演算に対する入力となる2つの数値を入力します。 たとえば、次のように入力します。
4.0 5.5
System.out.println()メソッドからの出力が、出力ボックスに表示されます。
以上で作業は完了です。 Webサービスを正しく配備してテストしました。
アプリケーションの開発 このレッスンでは、基本的な算術に対して複数のメソッドを提供するWebサービスのWARを作成して配備しました。 生成したクライアントプログラムのコードを編集し、クライアントを実行してWebサービスをテストしました。
Workbenchツールの使用 Workbenchで、次のツールを使用しました。
[Project Settings]ダイアログボックス([Project]>[Project Settings]の順に選択)
配備ツール(プロジェクトポップアップメニューで[Open Deployment Descriptor]を選択し、[Edit]>[Profiles]、[Project]>[Deployment Settings]、[Project]>[Deploy Archive]の順に選択)
[Web Service Wizard Client Runner]ウィンドウ([Project]>[Run Web Service Client Class]の順に選択)
次のレッスン 次のレッスンでは、Webサービスを記述するWSDLファイルから、クライアントコードを生成する方法について学習します。
![]() ![]() ![]() ![]() ![]() |
チュートリアル : WEBサービスの操作 05/19/03 09:50:45 |
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.