SALTは構成に基づく製品で、既存のOracle Tuxedoアプリケーション・サービスを業界標準のWebサービスとして公開します。Webサービスのクライアント側のプログラミングの観点から見ると、(Oracle Tuxedoフレームワークと連携する) SALTは標準のWebサービス・プロバイダです。Webサービス・クライアント・プログラムを作成するには、SALTのWSDLファイルのみ使用する必要があります。
Webサービス・クライアント・プログラムを作成するには、次の手順に従います。
1.
|
SALTのWSDLファイルを生成するかダウンロードします。詳細は、 「SALTの構成」を参照してください。
|
3.
|
クライアント生成のスタブ・コードで定義されている関数を使用して、SALT Webサービスを呼び出すクライアント側のアプリケーション・コードを記述します。
|
4.
|
クライアント・アプリケーションをコンパイルして実行します。
|
REpresentational State Transfer (REST)のサポート
RESTが有効な場合、RESTポートで受信されたリクエストはGWWSによって次のように処理されます。
Oracle Tuxedoサービスの名前が、呼び出されたRESTサービスの名前になります(例,
TOUPPER)。
次のHTTPヘッダーを使用して、データ・フォーマットと入力Oracle Tuxedoバッファ・タイプを指定します。
application/jsonに設定すると、HTTPクライアントとの間のデータ転送にJSONを使用することを示します。
application/xml:に設定すると、HTTPクライアントとの間のデータ転送にXMLを使用することを示します。
注意:
|
application/jsonおよび application/xmlは、構造化バッファ・タイプ( VIEW、 VIEW32、 FML、 FML32、 X_C_TYPE、 X_COMMON)にのみ適用されます。シンプル・バッファと POSTまたは PUTを使用するには、Content-typeを適切な値( STRINGには" text/plain"、 CARRAYには" application/octet-stream"など)に設定する必要があります。
|
データが入力されない場合、Oracle Tuxedoサービスは
NULL Oracle Tuxedoバッファを使用して呼び出されます。同様に、Oracle Tuxedoサービスがデータを返さなかった場合は、応答にもデータが含まれません(これは有効なユースケースです)。
* Tuxedo service business interface
virtual std::string TOUPPER(const std::string inputString) = 0;
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="myComponent">
<service name="TuxService">
<interface.cpp header="TuxService.h"/>
<inputBufferType>STRING</inputBufferType>
<outputBufferType>STRING</outputBufferType>
<reference>MYComponent</reference>
<component name="MYComponent">
<implementation.cpp library="TuxService" header="TuxServiceImpl.h"/>
例3: SALTDEPLOY RESTサービス定義
リスト3-3
SALTDEPLOY RESTサービス定義
<Network http="myhost:1234"/>
service="TuxService/TOUPPER"
http://myhost:1234/testSCA?teststring
Content-Type: text/xmlTESTSTRING
SALT Webサービス・クライアントのプログラミングのヒント
この項では、SALTでテスト済の次のプログラミング・ツールキットを使用したWebサービス・クライアント・プログラムの開発に役立つヒントを示します。
注意:
|
どのSOAPツールキットでもクライアント・ソフトウェアを開発できます。
|
ここで説明するツールキットのサンプル・ディレクトリは、SALTのインストール
後に確認できます。
Oracle WebLogic Webサービス・クライアントのプログラミング・ツールキット
WebLogic Serverには、
clientgenユーティリティが用意されています。このユーティリティはアプリケーション・サーバー・コンポーネントで組み込み、Webサービスのクライアント・サイドのJavaプログラムの開発に使用できます。呼出しは、スタンドアロンのJavaプログラムとサーバー・インスタンスから実行できます。詳細は、
『Oracle WebLogic Server JAX-WS Webサービスの開発』を参照してください。
SALTでは、従来の同期メッセージ交換モードに加えて、WebLogic Serverを使用した非同期の信頼性のあるWebサービス呼出しをサポートしています。非同期通信はWS-Addressing仕様で定義されています。信頼性のあるメッセージ交換は、WS-ReliableMessaging仕様に準拠しています。
ヒント:
|
HTTP MIME添付ファイルを使用するには、WebLogic固有のWSDLドキュメントを使用します。 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
|
Apache Axis for Java Webサービス・クライアントのプログラミング・ツールキット
SALTは、AXISの
wsdl2javaユーティリティをサポートしています。このユーティリティは、WSDLドキュメントからjavaスタブ・コードを生成します。AXIS Webサービスのプログラミング・モデルは、WebLogicに似ています。
ヒント:
|
1.HTTP MIME添付ファイル用、AXIS固有のWSDLドキュメントを使用します。
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メッセージが送信されることがあります。ただし、SALTはマルチリファレンス形式をサポートしていません。AXISのマルチリファレンス形式を無効にするには、 リスト3-4の手順に従います。
|
リスト3-4
AXISのマルチリファレンス形式の無効化
TuxedoWebServiceLocator service = new TuxedoWebServiceLocator();
service.getEngine().setOption("sendMultiRefs", false);��
ヒント:
|
3.WS-ReliableMessaging通信を行うには、Apache Sandenshaプロジェクトを使用します。
SALTとApache Sandenshaプロジェクト間におけるWS-ReliableMessagingの相互運用はテスト済です。Sandenshaの非同期モードと send offerをコードで設定する必要があります。 Apache Sandensha非同期モードと send offerのコード例を リスト3-5に示します。
|
リスト3-5
Apache Sandensha非同期モードとsend offerのサンプル・コード
/* 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 Webサービス・クライアントのプログラミング・ツールキット
Microsoft .Net 1.1/2.0は、.Net SDKパッケージで
wsdl.exeを提供しています。これはMicrosoftの無料の開発ツールキットです。SALTの
simpappサンプルでは、
simpapp/dnetclientディレクトリに.Netプログラムが用意されています。
.Net Webサービスのプログラミングはわかりやすくて簡単です。
wsdl.exeユーティリティとSALTのWSDLドキュメントを使用してスタブ・コードを生成し、スタブ・コードまたはバイナリの中の.Netオブジェクトをビジネス・ロジックの実装で参照します。
ヒント:
|
1.CARRAYに.NetプログラムのMIME添付ファイル・バインディングを使用しないでください。MicrosoftはSOAP通信のMIMEバインディングをサポートしていません。.Net開発では、 CARRAYのMIMEバインディングが指定されたWSDLドキュメントを使用しないでください。 SALTは、 CARRAYデータの base64Binaryエンコーディング(デフォルトのWSDLドキュメントの生成)をサポートしています。
|
ヒント:
|
2.RPC/encodedスタイルのSOAPメッセージは、GWWSサーバーで認識されないことがあります。RPC/encodedスタイルでSALTのWSDLドキュメントを生成すると、.Netによって soapenc:arrayTypeを含むSOAPメッセージが送信されます。SALTは、RPC/encodedスタイルで soapenc:arrayTypeをサポートしません。RPC/encodedスタイルで生成されたWSDLドキュメントのサンプルを、 リスト3-6に示します。
|
リスト3-6
RPC/encodedスタイルで生成されたWSDLドキュメントのサンプル
<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">
���
回避策: .Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用します。
ヒント:
|
3.RPC/encodedスタイルのxsd:base64Binaryに関するエラー・メッセージSALTのWSDLドキュメントで xsd:base64BinaryがRPC/encodedスタイルで使用されている場合、 wsdl.exeはスタブ・コードを生成できます。ただし、クライアント・プログラムは次のような実行時エラーを報告する可能性があります。 System.InvalidOperationException:'base64Binary'は SoapElementAttribute.DataTypeプロパティに対して無効な値です。プロパティはプリミティブ型のみに対して指定する場合があります。
|
回避策:これは.Netフレームワークの問題です。
.Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用してください。
Webサービス・クライアントのプログラミング・リファレンス
•
|
Oracle WebLogic 10.0 Webサービス・クライアントのプログラミング・リファレンス
|
•
|
Apache Axis 1.3 Webサービス・クライアントのプログラミング・リファレンス
|
•
|
Microsoft .NET Webサービスのプログラミング・リファレンス
|