目次 前 次 PDF


WebサービスのOracle Tuxedo ATMIプログラミング

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ファイルで設定する必要があります。
詳細は、『SALTリファレンス・ガイド』「SALT Webサービス定義ファイルのリファレンス」を参照してください。
他のWebサービスの外部アプリケーション・プロトコル情報が、生成されたWSDFファイルに保存されます(SOAPプロトコル・バージョン、SOAPメッセージのエンコーディング・スタイル、エンドポイントのアクセスなどを含む)。
WSDLファイル内に埋め込まれたXMLスキーマ定義をコピーして別の.xsdファイルに保存します。
wsdl:operationオブジェクトとその入力/出力メッセージの情報は、Oracle Tuxedoサービス・メタデータ・リポジトリの入力構文に準拠するOracle Tuxedoサービスの定義として変換します。
表4-1に、WSDLファイルとOracle Tuxedo定義ファイル間の詳細なマッピング関係を示します。
 
表4-1 WSDLモデル/Oracle Tuxedoモデルのマッピング・ルール
WSDLオブジェクト
Oracle Tuxedo/SALT定義ファイル
Oracle Tuxedo/SALT定義オブジェクト
/wsdl:binding
SALT Webサービスの定義ファイル(WSDF)
/WSBinding
/wsdl:portType
/WSBinding/Servicegroup
/wsdl:binding/soap:binding
/WSBinding/SOAP
/wsdl:portType/operation
メタデータ入力ファイル(MIF)
/WSBinding/service
/wsdl:types/xsd:schema
FML32フィールド定義表
フィールド名の型
SALTのプロキシ・サービスの呼出し
次の項では、Oracle Tuxedoアプリケーションから変換されたSALTのプロキシ・サービスの呼出し方法について説明します。
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ヘッダーをアプリケーション・バッファに添付)を実行します。
tpforward(3c)
Oracle Tuxedoサーバー・アプリケーションはこの関数を使用して、Oracle Tuxedoリクエストを指定されたSALTプロキシ・サービスに転送します。レスポンス・バッファは、従来のネイティブOracle Tuxedoサービスの場合と同様に、クライアント・アプリケーションのレスポンス・キューに直接送信されます。
TMQFORWARDを有効したキュー・ベース通信
Oracle Tuxedoシステム・サーバーTMQFORWARDは、キューに登録されたリクエストを受け付けて、そのキューと同じ名前であるSALTのプロキシ・サービスに送信します。
詳細は、『Oracle Tuxedo ATMI C関数』および『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
SALTには、次のOracle Tuxedo通信パターンはサポートされていません。
会話型通信
イベント・ベースの通信
Oracle Tuxedo発信呼出しのプログラミング: メイン・ステップ
GWWSを起動してSALTのプロキシ・サービスを公開する場合、このサービスを呼び出すためにOracle Tuxedoアプリケーションを生成できます。SALTのプロキシ・サービスをアクセスするプログラムを開発するには、次の手順に従います。
1.
SALTのプロキシ・サービス・インタフェースについてはOracle Tuxedoサービス・メタデータ・リポジトリの定義をチェックします。
2.
生成されたFML32フィールド表ファイルを探します。フィールド名の競合を回避するためにFML32フィールド表を変更して、索引の有効なベース数を割り当てます。
注意:
GWWSは、wsdlcvtを使用して生成されたFML32フィールド表ファイルを常に使用します。フィールド名が一意であることをシステム・レベルで確認する必要があります。2つまたは複数のフィールドは同じフィールド名と関連つけられている場合、フィールド名を変更します。変更したフィールド名に従って、Oracle Tuxedoサービス・メタデータ・リポジトリの定義も変更するようにしてください。

生成されたFML32フィールド表のフィールド・インデックスのベース数は、無効なデフォルト値から有効な値に変更する必要があり、表のすべてのフィールド・インデックスは全体のシステム・レベルで一意であるかを確認できます。
3.
mkfldhdr32(1)を使用してFML32ヘッダー・ファイルを生成します。
4.
正しいFML32環境変数の設定でGWWSを起動します。
5.
クライアントが発信サービスを呼び出すためのスケルトンCソース・ファイルを記述します(Oracle TuxedoドキュメントとOracle Tuxedoサービス・メタデータ・リポジトリで生成された擬似コードを必要に応じて参照してください)。同期または非同期通信に対して、要件に応じてtpcall(1)またはtpacall(1)を使用できます。
6.
FML32バッファについては、FML32フィールドのシーケンスやオカレンスなど、Oracle Tuxedoサービス・メタデータ・リポジトリで定義された各FML32フィールド(対応するSALTのプロキシ・サービスの入力バッファの詳細に準拠する)を追加する必要があります。フィールド名を参照するには、生成されたヘッダー・ファイルをクライアント・ソースに追加することができます。
7.
入力バッファを準備しておきます。メタデータで定義されたタイプと同じタイプの返されたバッファを処理できます。
実行ファイルを生成するには、ソースをコンパイルします。
実行ファイルをテストします。
GWWSから戻ったエラー・コードの管理
外部Webサービスをアクセスする時にGWWSサーバーにエラーが発生した場合、Oracle Tuxedoアプリケーションがエラーを診断できるようにtperrnoを設定します。表4-2に、使用可能なSALTのプロキシ・サービスtperrno値を示します。
 
表4-2 GWWS/Tuxedoフレームワークから返されたエラー・コード
TPERRNO
考えられるエラーの原因
TPENOENT
要求されたSALTのプロキシ・サービスはGWWSにより通知されていない。
TPESVCERR
外部Webサービスのアプリケーションから返されたHTTP応答メッセージを無効である。
外部Webサービスのアプリケーションから返されたSOAPレスポンス・メッセージは非整形式です。
TPEPERM
認証に失敗しました。
TPEITYPE
Oracle Tuxedoリクエスト・タイプ・バッファをSOAPリクエスト・メッセージのXMLペイロードに変換する時にメッセージの変換に失敗します。
TPEOTYPE
SOAPレスポンス・メッセージのXMLペイロードをOracle Tuxedoレスポンス・タイプ・バッファに変換する時にメッセージの変換に失敗します。
TPEOS
システム・リソースに制限があるため、リクエストが拒否される。
TPETIME
タイムアウトが発生しました。このタイムアウトはBBL BLOCKTIMEまたはSALTの発信呼出しタイムアウトです。
TPSVCFAIL
外部WebサービスはSOAPフォルト・メッセージを返します。
TPESYSTEM
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=FML32errbufが常に含まれています。
errbufFML32バッファです。これは、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内のファイルとして定義されます。要素が必須か省略可能かどうかに応じて、requiredcount1または0になります。
メタデータ内の各部分の定義は、SOAPフォルト・メッセージ内の<detail>要素のエラー・バッファ内のフィールドへの変換を制御します。
表4-3には、アウトバウンドSOAPフォルトのerrbuf定義を示します。
 
表4-3 アウトバウンドSOAPフォルトのErrbuf定義
Metaパラメータ
SOAPバージョン
必須
メモ
faultcode
1.1
string
あり
 
faultstring
1.1
string
あり
 
faultactor
1.1
string
いいえ
 
detail
1.1
fml32
いいえ
wsdl:faultが定義されていない場合、このフィールドにはXMLフィールドが含まれます。
Code
1.2
fml32
あり
値と省略可能なサブコードが含まれます。
Reason
1.2
fml32
あり
複数のテキストが含まれます
Node
1.2
string
いいえ
 
Role
1.2
string
いいえ
 
Detail
1.2
fml32
いいえ
詳細フィールドと同じです。
関連項目
『Oracle Tuxedo ATMI C関数』
『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved