プログラミング・ガイド

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

Webサービス・クライアント・プログラミング

この項には次のトピックが含まれます:

 


概要

SALTは構成に基づく製品で、既存のOracle Tuxedoアプリケーション・サービスを業界標準のWebサービスとして公開します。Webサービスのクライアント側のプログラミングの観点から見ると、Oracle Tuxedoフレームワークと連携するSALTは標準のWebサービス・プロバイダです。Webサービス・クライアント・プログラムを作成するには、SALTのWSDLファイルのみ使用する必要があります。

Webサービス・クライアント・プログラムを作成するには、次の手順に従います。

  1. SALTのWSDLファイルを生成するかダウンロードします。詳細については、「SALTの構成」を参照してください。
  2. Webサービスのクライアント・サイドのツールキットを使用して、SALTのWSDLドキュメントを解析し、クライアント・スタブ・コードを生成します。詳細は、「SALT Webサービス・クライアントのプログラミングのヒント」を参照してください。
  3. クライアント生成のスタブ・コードで定義されている関数を使用して、SALT Webサービスを呼び出すクライアント側のアプリケーション・コードを記述します。
  4. クライアント・アプリケーションをコンパイルして実行します。

REpresentational State Transfer (REST)のサポート

RESTが有効な場合、RESTポートで受信されたリクエストはGWWSによって次のように処理されます。

URIは次の形式に従っている必要があります。

<REST service name>

Oracle Tuxedoサービスの名前が、呼び出されたRESTサービスの名前になります(例: TOUPPER)。

次のHTTPヘッダーを使用して、データ・フォーマットと入力Oracle Tuxedoバッファ・タイプを指定します。

一方向(入力および出力)

入力としてデータが渡されなかった場合、Oracle TuxedoサービスはOracle TuxedoバッファをNULLとして呼び出されます。同様に、Oracle Tuxedoサービスがデータを返さなかった場合は、応答にもデータが含まれません(これは有効なユースケースです)。

ATMIおよびSCAのサポート

Oracle TuxedoサービスがRESTとして公開される場合のタイプ(ATMIまたはSCA)に制約はありません。SCAコンポーネントを使用する場合は、SCAのデータ・マッピング規則に従う必要があります(「SCAデータ型のマッピング」を参照)。 「SCAとOracle Tuxedoの相互運用性」で説明したように、名前のマッピングが適用されることがあります。

サンプル

例1: .hインタフェース
リスト3-1 .hインタフェース
#include <string> 
/** 
  *  Tuxedo service business interface 
  */ 
  class TuxService 
  { 
  public: 
       virtual std::string TOUPPER(const std::string inputString) = 0;
  }; 
例2: SCDL記述子
リスト3-2 SCDL記述子
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="myComponent">  
  <service name="TuxService">
    <interface.cpp header="TuxService.h"/>                                                     
    <binding.atmi/>
    <inputBufferType>STRING</inputBufferType>
    <outputBufferType>STRING</outputBufferType>
    <reference>MYComponent</reference>    
  </service>   
  <component name="MYComponent">  
    <implementation.cpp library="TuxService" header="TuxServiceImpl.h"/> 
  </component>                                               
</composite>
例3: SALTDEPLOY RESTサービス定義
リスト3-3 SALTDEPLOY RESTサービス定義
<REST>
           <Network http="myhost:1234"/>
           <Service name="testSCA">
               <Method name="GET" 
                       reposservice=""
                       service="TuxService/TOUPPER"
                       inputbuffer="STRING"/>
           </Service>
...
        </REST>
例4: サービスの呼出しに使用されるURL

http://myhost:1234/testSCA?teststring

例5: レスポンス

HTTP/1.1 200 OK

Content-Type: text/xmlTESTSTRING

 


SALT Webサービス・クライアントのプログラミングのヒント

この項では、SALTでテスト済の次のプログラミング・ツールキットを使用したWebサービス・クライアント・プログラムの開発に役立つヒントを示します。

詳細は、『SALT管理ガイド』相互運用性に関する考慮事項に関する項を参照してください。

注意: どの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ドキュメントのサンプル
<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に関するエラー・メッセージ

SALTのWSDLドキュメントでxsd:base64BinaryがRPC/encodedスタイルで使用されている場合、wsdl.exeはスタブ・コードを生成できますが、クライアント・プログラムは次のような実行時エラーを記録している可能性があります。

System.InvalidOperationException:'base64Binary'
SoapElementAttribute.DataTypeプロパティに対して無効な値です。プロパティはプリミティブ型のみに対して指定する場合があります。

回避策:これは.Netフレームワークの問題です。
.Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用してください。

 


Webサービス・クライアントのプログラミング・リファレンス

オンライン・リファレンス


  先頭に戻る       前  次