![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第11章
この章では、RPCスタイルのWebサービスを起動するページフローの作成方法について説明します。この章には、次のトピックが含まれています。
exteNd DirectorにはWebサービスページフローウィザードがあり、Webサービスを実行するページフロー作成の手助けをします。 このウィザードは、Webサービスアクティビティを使用してサービスを起動します。
Webサービスアクティビティは、ドキュメントスタイルのWSDLファイルのみをサポートしています。 ただし、Javaアクティビティを使用すると、RPCスタイルのWebサービスを起動するページフローを作成することができます。
例 次に、RPCスタイルのWebサービスを実行するページフローの例を示します。
入力ページはランタイム時に次のようになります。
出力ページはランタイム時に次のようになります。
RPCスタイルのWebサービスをページフローで使用するには、次の操作を行う必要があります。
Webサービスコンシューマを生成するには、Webサービスウィザードを実行する必要があります。 ウィザードを実行するときに、入力としてWSDLファイルを指定します。 この場合、WSDLファイルは、RPCスタイルのバインドを使用するWebサービスを説明します。
コンシューマのプロジェクト、パッケージ、およびディレクトリの指定 ランタイム時に見つかる生成されたクラスを確認するため、ウィザードを実行する場合は次の設定を指定する必要があります。
コンシューマの生成方法の詳細については、『ユーティリティツール』のWebサービスコンシューマの生成に関する章を参照してください。
ウィザードを実行したら、Webサービスクライアントランナーを実行してWebサービスコンシューマをテストできます。 ただし、この操作を行う前に次の操作を行う必要があります。
xxxClient.javaファイルの編集 生成されたxxxClient.javaファイルを使用する前に、次のことを確認してください。
WebサービスSDKに必要なアーカイブのプロジェクトへの追加
必要なアーカイブの完全なリストについては、『ユーティリティツール』のWebサービスコンシューマの生成に関する章を参照してください。
Javaアクティビティは、ページフローのコンテキスト内でJavaクラスを実行するシステムアクティビティです。 Javaアクティビティを使用すると、ユーザ操作なしに自動的に実行される、カスタムのビジネスロジックを記述できます。
Javaアクティビティウィザードを使用してJavaアクティビティを作成し、作成されたJavaクラステンプレートをコード化してページフローモデラーでアクティビティを追加することができます。
JavaアクティビティからWebサービスを起動する場合、次の操作を行うためにいくつかのJavaコードを含める必要があります。
このロジックは、Webサービスウィザードを実行するときに生成されます。 このロジックは、生成されたxxxClient.javaファイルからJavaアクティビティのinvoke()メソッドに、次のように単純にコピーできます。
import com.sssw.wf.api.*; import javax.naming.*; import net.xmethods.sd.*; public class TemperatureJavaActivity implements EbiJavaActivity public TemperatureJavaActivity() { } public void invoke(EbiContext context) { System.out.println("TemperatureJavaActivity"); try { InitialContext ctx = new InitialContext(); String lookup = "xmlrpc:soap:net.xmethods.sd.TemperatureService"; TemperatureService service = (TemperatureService)ctx.lookup(lookup); TemperaturePortType remote = (TemperaturePortType)service.getTemperaturePort(); // get the ZIP from the portlet session String zip = (String)context.getEbiWhiteboard().getScopedValue( "ZIP" ); float f = remote.getTemp(zip); context.getEbiWhiteboard().setScopedValue("TEMP", String.valueOf( f ) ); } catch ( Exception e ) { throw new RuntimeException (e); } ... }
また、このJavaアクティビティも、セッションオブジェクトで郵便番号(ZIP)を取得し、気温(TEMP)を設定するため、スコープパスAPIを使用することに注意してください。
サービスを起動するヘルパクラスの使用 exteNd DirectorAPIでは、Webサービスの起動に使用できるペルパクラスを提供しています。 このクラスは、WebServiceActivityHelperと呼ばれます。 com.novell.afw.portal.portlet.pfパッケージにあります。 次に、このヘルパクラスを使用するコードの例を示します。
import com.sssw.wf.api.*; import com.novell.afw.portal.portlet.pf.*; public class TemperatureJavaActivity implements EbiJavaActivity { public TemperatureJavaActivity() { } public void invoke(EbiContext context) { System.out.println("TemperatureJavaActivity"); try { WebServiceActivityHelper wsHelper = new WebServiceActivityHelper(); net.xmethods.sd.TemperaturePortType remote = (net.xmethods.sd.TemperaturePortType) wsHelper.getRemote( net.xmethods.sd.TemperatureService.class, net.xmethods.sd.TemperaturePortType.class); // get the ZIP from the portlet session String zip = (String)context.getEbiWhiteboard().getScopedValue( "ZIP" ); float f = remote.getTemp(zip); context.getEbiWhiteboard().setScopedValue( "TEMP", String.valueOf( f ) ); } catch ( Exception e ) { throw new RuntimeException (e); } ... }
通常は、Webサービスを起動するページフローの出力ページだけではなく、入力ページも作成する必要があります。 入力ページでは、サービスに渡すパラメータの値を入力できます。 出力ページは、サービスにより返されたデータを表示します。
次に、サンプルの入力ページのHTMLを示します。
<form name="form1" method="post" action="wsrp_rewrite?wsrp-urlType=blockingAction/wsrp_rewrite"> <br/> <span class="portlet-form-field-label"> Zip </span> <input class="portlet-form-field" type="name" name="zip" value="02630" size="20\x94 > <br/><br/> <input type="submit" name="verb" value="Continue"> </form>
次に、サンプルの出力ページのHTMLを示します。
<form name="form1" method="post" action="wsrp_rewrite?wsrp-urlType=blockingAction/wsrp_rewrite"> <br/> <span class="portlet-form-field-label"> Zip Temperature : scopedpath?Session/TEMP/scopedpath </span> <br/><br/> <input type="submit" name="verb" value="Continue"> </form>
この例では、返されたデータ(気温)はスコープパスの式を使用して取得されています。
scopedpath?Session/TEMP/scopedpath
ページフローは次のようになります。
フローのスコープパスは次のとおりです。
HTML入力ページは、ユーザにより入力された郵便番号をSessionスコープの変数にコピーする実行後にコピー操作を指定します。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...