WebサービスのOracle Tuxedo ATMIプログラミング
SALTでは、外部WebサービスをOracle Tuxedoドメインにインポートできます。外部WebサービスをOracle Tuxedoドメインにインポートするには、最初に
WSDLファイルをロードして変換する必要があります。SALT WSDL変換ユーティリティ(
wsdlcvt)は、各
wsdl:operationをSALTのプロキシ・サービスに変換します。変換されたSALTのプロキシ・サービスを標準的なOracle Tuxedo ATMI関数を使用して直接に呼び出すことができます。
SALTのプロキシ・サービスの呼出しはGWWSサーバーに送信されます。リクエストはOracle Tuxedoタイプ・バッファからSOAPメッセージに変換して、対応する外部Webサービスに送信します。外部Webサービスからのレスポンスは、Oracle Tuxedo型付きバッファに変換して、Oracle Tuxedoアプリケーションに返します。GWWSはプロキシ仲介として機能します。
サービスを呼び出すときにエラーが発生する場合、GWWSサーバーは
tperrnoにより(Oracle Tuxedoアプリケーションによって取得可能な)エラー状態を設定します。これにより、SALTのプロキシ・サービスのエラー状態を検出し、処理することができます。
WSDLモデルのOracle Tuxedoモデルへの変換
SALTでは、WSDL変換ユーティリティ(
wsdlcvt)が提供されています。このユーティリティを使用すると、WSDLファイルで定義されたサービスにアクセスするためにOracle Tuxedo ATMIプログラムを開発できるよう、外部WSDLファイルをOracle Tuxedoの特定の定義ファイルに変換できます。
WSDL-to-Tuxedoオブジェクトのマッピング
SALTは、次のルールを使用してWSDLオブジェクト・モデルをOracle Tuxedoモデルに変換します。
•
|
SOAP over HTTPバインディングのみがサポートされています。各バインディングをWSDFファイルにWSBindingオブジェクトとして定義し保存します。
|
•
|
SOAPバインディングの各操作は1つのOracle Tuxedoスタイル・サービス(SALTのプロキシ・サービスとも呼ばれる)に対応します。操作名はOracle Tuxedoサービス名として使用され、Oracle Tuxedoサービス・メタデータ・リポジトリで索引されます。
|
注意:
|
操作名がOracle Tuxedoサービス名の最大長(255文字)を超える場合は、一意の短いOracle Tuxedoサービス名をメタデータ・リポジトリで手動で設定し、 <Service> tuxedoRef属性を WSDFファイルで設定する必要があります。
|
•
|
他のWebサービスの外部アプリケーション・プロトコル情報が、生成された WSDFファイルに保存されます(SOAPプロトコル・バージョン、SOAPメッセージのエンコーディング・スタイル、エンドポイントのアクセスなどを含む)。
|
•
|
WSDLファイル内に埋め込まれたXMLスキーマ定義をコピーして別の .xsdファイルに保存します。
|
•
|
各 wsdl:operationオブジェクトとその入力/出力メッセージの情報は、Oracle Tuxedoサービス・メタデータ・リポジトリの入力構文に準拠するOracle Tuxedoサービスの定義として変換します。
|
表4-1に、
WSDLファイルとOracle Tuxedo定義ファイル間の詳細なマッピング関係を示します。
表4-1
WSDLモデル/Oracle Tuxedoモデルのマッピング・ルール
|
|
Oracle Tuxedo/SALT定義オブジェクト
|
|
SALT Webサービスの定義ファイル(WSDF)
|
|
|
|
/wsdl:binding/soap:binding
|
|
|
|
|
|
|
|
次の項では、Oracle Tuxedoアプリケーションから変換されたSALTのプロキシ・サービスの呼出し方法について説明します。
SALTでは、発信サービスの呼出しに対するOracle Tuxedoリクエスト/レスポンスの通信パターンのみがサポートされています。Oracle Tuxedoアプリケーションは、次の通信Oracle Tuxedo ATMIによりSALTのプロキシ・サービスをリクエストすることができます。
•
|
tpcall(3c) / tpacall(3c) / tpgetreply(3c)
|
これらの基準的なATMI機能をOracle Tuxedo型付きバッファとともに入力パラメータとして呼び出すことができます。呼出しが返された場合、Oracle Tuxedo型付きバッファも返されます。これらのすべてのバッファは、変換された外部Webサービス・インタフェースに準拠します。
tpacall/
tpgetreplyは、SOAP非同期通信と関連していません。
•
|
tpgetcallinfo(3c)/tpsecallinfo(3c)
|
tpgetcallinfo()は、
FML32形式のGWWSゲートウェイを使用するアプリケーション・バッファに関連するHTTPヘッダーを取得します。
tpsetcallinfo()は、その逆(例: リモートHTTP (SOAPなどの)サーバーに送信される
FML32形式のHTTPヘッダーをアプリケーション・バッファに添付)を実行します。
Oracle Tuxedoサーバー・アプリケーションはこの関数を使用して、Oracle Tuxedoリクエストを指定されたSALTプロキシ・サービスに転送します。レスポンス・バッファは、従来のネイティブOracle Tuxedoサービスの場合と同様に、クライアント・アプリケーションのレスポンス・キューに直接送信されます。
Oracle Tuxedoシステム・サーバー
TMQFORWARDは、キューに登録されたリクエストを受け付けて、そのキューと同じ名前であるSALTのプロキシ・サービスに送信します。
SALTには、次のOracle Tuxedo通信パターンはサポートされていません。
Oracle Tuxedo発信呼出しのプログラミング: メイン・ステップ
GWWSを起動してSALTのプロキシ・サービスを公開する場合、このサービスを呼び出すためにOracle Tuxedoアプリケーションを生成できます。SALTのプロキシ・サービスをアクセスするプログラムを開発するには、次の手順に従います。
1.
|
SALTのプロキシ・サービス・インタフェースについてはOracle Tuxedoサービス・メタデータ・リポジトリの定義をチェックします。
|
2.
|
生成されたFML32フィールド表ファイルを探します。フィールド名の競合を回避するためにFML32フィールド表を変更して、索引の有効なベース数を割り当てます。
|
注意:
|
GWWSは、 wsdlcvtを使用して生成されたFML32フィールド表ファイルを常に使用します。フィールド名が一意であることをシステム・レベルで確認する必要があります。2つまたは複数のフィールドは同じフィールド名と関連つけられている場合、フィールド名を変更します。変更したフィールド名に従って、Oracle Tuxedoサービス・メタデータ・リポジトリの定義も変更するようにしてください。 生成されたFML32フィールド表のフィールド・インデックスのベース数は、無効なデフォルト値から有効な値に変更する必要があり、表のすべてのフィールド・インデックスは全体のシステム・レベルで一意であるかを確認できます。
|
4.
|
正しい FML32環境変数の設定でGWWSを起動します。
|
5.
|
クライアントが発信サービスを呼び出すためのスケルトンCソース・ファイルを記述します(Oracle TuxedoドキュメントとOracle Tuxedoサービス・メタデータ・リポジトリで生成された擬似コードを必要に応じて参照してください)。同期または非同期通信に対して、要件に応じて tpcall(1)または tpacall(1)を使用できます。
|
6.
|
FML32バッファについては、FML32フィールドのシーケンスやオカレンスなど、Oracle Tuxedoサービス・メタデータ・リポジトリで定義された各FML32フィールド(対応するSALTのプロキシ・サービスの入力バッファの詳細に準拠する)を追加する必要があります。フィールド名を参照するには、生成されたヘッダー・ファイルをクライアント・ソースに追加することができます。
|
7.
|
入力バッファを準備しておきます。メタデータで定義されたタイプと同じタイプの返されたバッファを処理できます。
|
•
|
実行ファイルを生成するには、ソースをコンパイルします。
|
外部Webサービスをアクセスする時にGWWSサーバーにエラーが発生した場合、Oracle Tuxedoアプリケーションがエラーを診断できるように
tperrnoを設定します。
表4-2に、使用可能なSALTのプロキシ・サービス
tperrno値を示します。
表4-2
GWWS/Tuxedoフレームワークから返されたエラー・コード
|
|
|
要求されたSALTのプロキシ・サービスはGWWSにより通知されていない。
|
|
外部Webサービスのアプリケーションから返されたHTTP応答メッセージを無効である。
外部Webサービスのアプリケーションから返されたSOAPレスポンス・メッセージは非整形式です。
|
|
|
|
Oracle Tuxedoリクエスト・タイプ・バッファをSOAPリクエスト・メッセージのXMLペイロードに変換する時にメッセージの変換に失敗します。
|
|
SOAPレスポンス・メッセージのXMLペイロードをOracle Tuxedoレスポンス・タイプ・バッファに変換する時にメッセージの変換に失敗します。
|
|
システム・リソースに制限があるため、リクエストが拒否される。
|
|
タイムアウトが発生しました。このタイムアウトはBBL BLOCKTIMEまたはSALTの発信呼出しタイムアウトです。
|
|
外部WebサービスはSOAPフォルト・メッセージを返します。
|
|
GWWS内部エラー。詳細は、 ULOGを参照してください。
|
Oracle Tuxedoアウトバウンド・アプリケーションでのフォルト・メッセージの処理
WSDLファイルにリストされたすべてのルールは、WSDL入力/出力メッセージをOracle Tuxedoメタデータinbuf/outbufの定義にマップするために使用されます。いくつかのルールを変更すると、
WSDLファイルのデフォルト・メッセージをOracle Tuxedoメタデータ
errbufにマップできます。
メタデータ
errbufをSOAPフォルト・メッセージにマップするために、TuxモードおよびXSDモードという2つのモードがあります。
•
|
Tuxモードは、 TPFAILで戻されたOracle Tuxedoの元のエラー・バッファの変換に使用します。SOAPフォルトの <detail>要素で、エラー・バッファをXMLペイロードに変換します。
|
•
|
XSDモードは、Oracle Tuxedoバッファで定義されたSOAPフォルト・メッセージと WSDLファイル・フォルト・メッセージを表すために使用します。マッピング・ルールは次のとおりです。
|
•
|
XSDモードの各サービス( servicemode=webservice),については、メタデータで type=FML32の errbufが常に含まれています。
|
•
|
errbufは FML32バッファです。これは、SOAP 1.1と1.2のそれぞれに対応して異なって表示される SOAP:Faultメッセージの完全な記述です。 errbuf定義の内容は、SOAPバージョンとWSDLフォルト・メッセージの両方によって決定します。
|
•
|
パラメータの詳細/詳細(1.1/1.2)はFML32フィールドで、 wsdl:faultメッセージ( wsdl:faultが存在する場合)で定義された wsdl:partを表します。各部分は、FML32フィールド内に param(フィールド)として定義されます。マッピング・ルールは、入力/出力バッファの場合と同じです。相違点は、各paramの requiredcountは0である(つまり、SOAPフォルト・メッセージにこれが表示されない可能性がある)ことです。
|
•
|
soap:faultメッセージに表示されるその他の要素は、常に errbuf内のファイルとして定義されます。要素が必須か省略可能かどうかに応じて、 requiredcountは 1または 0になります。
|
•
|
メタデータ内の各部分の定義は、SOAPフォルト・メッセージ内の <detail>要素のエラー・バッファ内のフィールドへの変換を制御します。
|
表4-3には、アウトバウンドSOAPフォルトの
errbuf定義を示します。
表4-3
アウトバウンドSOAPフォルトのErrbuf定義
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wsdl:faultが定義されていない場合、このフィールドにはXMLフィールドが含まれます。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|