Oracle SALTは構成に基づく製品で、既存のOracle Tuxedoアプリケーション・サービスを業界標準のWebサービスとして公開します。Webサービスのクライアント側のプログラミングの観点から見ると、Oracle Tuxedoフレームワークと連携するOracle SALTは標準のWebサービス・プロバイダです。Webサービス・クライアント・プログラムを作成するには、Oracle SALTのWSDLファイルのみ使用する必要があります。
Webサービス・クライアント・プログラムを作成するには、次の手順に従います。
この項では、Oracle SALTでテスト済みの次のプログラミング・ツールキットを使用したWebサービス・クライアント・プログラムの開発に役立つヒントを示します。
詳細は、Oracle SALT管理ガイドの「相互運用性に関する考慮事項」を参照してください。
注: | どのSOAPツールキットでもクライアント・ソフトウェアを開発できます。 |
注: | ここで説明するツールキットのサンプル・ディレクトリは、Oracle SALTのインストール後に確認できます。 |
WebLogic Serverには、clientgen
ユーティリティが用意されています。このユーティリティはアプリケーション・サーバー・コンポーネントで組み込み、Webサービスのクライアント側のJavaプログラムの開発に使用できます。Webサービスは、スタンドアロンのJavaプログラムとサーバー・インスタンスから呼び出すことができます。詳細は、http://edocs.bea.com/wls/docs91/webserv/client.html#standalone_invokeを参照してください。
Oracle SALTでは、従来の同期メッセージ交換モードに加えて、WebLogic Serverを使用した非同期の信頼性のあるWebサービス呼出しをサポートしています。 非同期通信はWS-Addressing仕様で定義されています。 信頼性のあるメッセージ交換は、WS-ReliableMessaging仕様に準拠しています。
ヒント: | HTTP MIME添付ファイルを使用するには、WebLogic固有のWSDLドキュメントを使用します。 Oracle SALTでは、Oracle Tuxedo CARRAY データをSOAPリクエストのMIME 添付ファイルにマッピングできます。MIME バインディングでは追加の符号化ラッピングを必要としないため、この機能はバイナリ・データ・ストリームが大きい場合に役立ちます。これにより、CPUサイクルとネットワーク帯域幅を節約できます。また、エンタープライズ・サービス指向の環境では、バイナリ・データを使用すると、高レベルのデータ・ルーティングと変換処理が可能になります。符号化されたデータは、問題を引き起こすことがあります。Oracle Tuxedo CARRAY データのMIME データ・バインディングを有効にするには、オンライン・ダウンロード時とtmwsdlgen コマンド・ユーティリティの使用時に、WSDL ドキュメント生成オプションで特別なフラグを指定する必要があります。オンライン・ダウンロード: http://salt.host:portnumber//wsdl?mappolicy=raw&toolkit=wls tmwsdlgenユーティリティ tmwsdlgen -c WSDF_FILE -m raw -t wls |
Oracle SALTは、AXISのwsdl2java
ユーティリティをサポートしています。このユーティリティは、WSDLドキュメントからjavaスタブ・コードを生成します。AXIS Webサービスのプログラミング・モデルは、WebLogicに似ています。
ヒント: | 1. HTTP MIME添付ファイルを使用するには、AXIS固有のWSDLドキュメントを使用します。 Oracle SALTは、Oracle Tuxedo CARRAY データのHTTP MIME転送をサポートしています。WSDLのオンライン・ダウンロードとtmwsdlgen ユーティリティで特別なオプションを指定する必要があります。オンライン・ダウンロード: http://salt.host:portnumber//wsdl?mappolicy=raw&toolkit=axis tmwsdlgenユーティリティ tmwsdlgen -c WSDF_FILE -m raw -t axis |
ヒント: | 2. RPC/encodedスタイルを使用する場合は、AXISでマルチリファレンス形式を無効にします。 AXISでは、WSDLドキュメントにRPC/encodedスタイルが指定されている場合は、マルチリファレンス形式のSOAPメッセージが送信されることがあります。 ただし、Oracle SALTはマルチリファレンス形式をサポートしていません。 AXISのマルチリファレンス形式を無効にするには、リスト3-1の手順に従います。 |
TuxedoWebServiceLocator service = new TuxedoWebServiceLocator();
service.getEngine().setOption("sendMultiRefs", false);
¦
ヒント: | 3. WS-ReliableMessaging通信を行うには、Oracle SALTでApache Sandenshaプロジェクトを使用します。 Oracle SALTとApache Sandenshaプロジェクト間におけるWS-ReliableMessagingの相互運用はテスト済です。Sandenshaの非同期モードと send offer をコードで設定する必要があります。Apache Sandensha非同期モードと send offer のコード例を、リスト3-2に示します。 |
/* Call the service */
TuxedoWebService service = new TuxedoWebServiceLocator();
Call call = (Call) service.createCall();
SandeshaContext ctx = new SandeshaContext();
ctx.setAcksToURL("http://127.0.0.1:" + defaultClientPort + "/axis/services/RMService");
ctx.setReplyToURL("http://127.0.0.1:" + defaultClientPort + "/axis/services/RMService");
ctx.setSendOffer(true);
ctx.initCall(call, targetURL, "urn:wsrm:simpapp", Constants.ClientProperties.IN_OUT);
call.setUseSOAPAction(true);
call.setSOAPActionURI("ToUpperWS");
call.setOperationName(new javax.xml.namespace.QName("urn:pack.simpappsimpapp_typedef.salt11", "ToUpperWS"));
call.addParameter("inbuf", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
String input = new String();
String output = new String();
int i;
for (i = 0; i < 3; i++ ) {
input = "request" + "_" + String.valueOf(i);
System.out.println("Request:"+input);
output = (String) call.invoke(new Object[]{input});
System.out.println("Reply:" + output);
}
ctx.setLastMessage(call);
input = "request" + "_" + String.valueOf(i);
System.out.println("Request:"+input);
output = (String) call.invoke(new Object[]{input});
Microsoft .Net 1.1/2.0は、.Net SDKパッケージでwsdl.exe
を提供しています。 これはMicrosoftの無料の開発ツールキットです。 Oracle SALTのsimpapp
サンプルでは、simpapp/dnetclient
ディレクトリに.Netプログラムを用意しています。
.Net Webサービスのプログラミングはわかりやすくて簡単です。wsdl.exe
ユーティリティとOracle SALTのWSDLドキュメントを使用してスタブ・コードを生成し、スタブ・コードまたはバイナリの中の.Netオブジェクトをビジネス・ロジックの実装で参照します。
ヒント: | 1. CARRAYに.NetプログラムのMIME添付ファイル・バインディングを使用しないでください。 MicrosoftはSOAP通信のMIMEバインディングをサポートしていません。.Net開発では、CARRAYのMIMEバインディングが指定されたWSDLドキュメントを使用しないでください。 Oracle SALTは、CARRAYデータの base64Binary エンコーディング(デフォルトのWSDLドキュメントの生成)をサポートしています。 |
ヒント: | 2. RPC/encodedスタイルのSOAPメッセージは、GWWSサーバーで認識されないことがあります。 RPC/encodedスタイルでOracle SALTのWSDLドキュメントを生成すると、.Netによって soapenc:arrayType を含むSOAPメッセージが送信されます。Oracle SALTは、RPC/encodedスタイルでsoapenc:arrayType をサポートしません。RPC/encodedスタイルで生成されたWSDLドキュメントのサンプルを、リスト3-3に示します。 |
<wsdl:types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:pack.TuxAll_typedef.salt11">
<xsd:complexType name="fml_TFML_In">
<xsd:sequence>
<xsd:element maxOccurs="60" minOccurs="60" name="tflong" type="xsd:long"></xsd:element>
<xsd:element maxOccurs="80" minOccurs="80" name="tffloat" type="xsd:float"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="fml_TFML_Out">
…
</xsd:complexType>
</xsd:schema>
</wsdl:types>
回避策: .Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用します。
ヒント: | 3. RPC/encodedスタイルのxsd:base64Binaryに関するエラー・メッセージ RPC/encodedスタイルのOracle SALTのWSDLドキュメントで xsd:base64Binary を使用する場合は、wsdl.exe でスタブ・コードを生成できます。ただし、クライアント・プログラムによって次のような実行時エラーが報告されることがあります。 プロパティのためSystem.InvalidOperationException:'base64Binary' は無効な値です。 プロパティはプリミティブ型のみに対して指定する場合があります。 |
回避策:これは.Netフレームワークの問題です。
.Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用してください。
スタンドアロン・クライアントからのWebサービスの呼出し:主な手順
Consuming Web Services with Axis