第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 ...