|
Oracle SALT では、WSDL メッセージと Tuxedo タイプ バッファとの間における双方向のデータ型のマッピングをサポートしています。サービス呼び出しの度に、GWWS サーバは、Tuxedo タイプ バッファと SOAP メッセージ ペイロードとの間における各メッセージを変換します。SOAP メッセージ ペイロードは <soap:body> 要素にカプセル化された XML データです。詳細については、「Oracle SALT のメッセージ変換について」を参照してください。
ネイティブ Tuxedo サービスについては、Tuxedo の各バッファ型は、SALT で生成される WSDL ドキュメント内では XML スキーマを使って記述されます。Tuxedo サービスの要求/応答バッファが通常の XML 形式で表現されます。詳細については、「Tuxedo サービス用 Tuxedo-to-XML データ型のマッピング」を参照してください。
外部 Web サービスについては、WSDL の各メッセージが Tuxedo FML32 バッファ構造としてマップされます。Tuxedo アプリケーションは、入力または出力として FML32 バッファを使用して SALT プロキシ サービスを呼び出します。詳細については、「外部 Web サービス用 XML-to-Tuxedo データ型のマッピング」を参照してください。
Oracle SALT メッセージ変換は SOAP XML データと Tuxedo タイプ バッファとの間のにおけるメッセージの変換プロセスです。Oracle SALT では、着信メッセージ変換および発信メッセージ変換という 2 つのメッセージ変換ルールを紹介しています。
着信メッセージ変換プロセスは、「Tuxedo-to-XML データ型マッピング ルール」に準拠する SOAP XML ペイロードと Tuxedo タイプ バッファの変換プロセスです。着信メッセージ変換プロセスは以下の 2 つの場合に行われます。
Oracle SALT では、SOAP メッセージ内の <inbuf>、<outbuf> や <errbuf> 要素に Tuxedo バッファ コンテンツが囲まれています。<inbuf>、<outbuf> や <errbuf> 要素に囲まれているコンテンツを「着信 XML ペイロード」と呼びます。
発信メッセージ変換プロセスは、「Tuxedo-to-XML データ型マッピング ルール」に準拠する SOAP XML ペイロードと Tuxedo タイプ バッファの変換プロセスです。発信メッセージ変換プロセスは以下の 2 つの場合に行われます。
以下の表では、着信メッセージ変換プロセスと発信メッセージ変換プロセスを比較しています。
Oracle SALT には、Tuxedo タイプ バッファを XML ドキュメントで記述するためのルール セットが提供されています。それらのルールは、SALT WSDL ドキュメント内の XML スキーマ定義としてエクスポートされます。そのため、Tuxedo のバッファ型に関する知識をあらかじめ備えていなくても簡単にバッファの変換を実行できます。
|
||||||
base64Binary でエンコードされる必要がある。このオペークなデータ ストリームに対して base64Binary エンコーディングを使うことにより、元のデータの内容を維持したまま、整形式かつ判読可能な形でデータを埋め込むことができる。
|
||||||
|
||||||
|
||||||
xsd:anyType 型がこれに対応し、SOAP メッセージに格納された XML ドキュメントに対応する型を表す。この型を使用すると、すべての整形式 XML データを SOAP メッセージ内でカプセル化できる。
|
||||||
|
||||||
|
||||||
|
Tuxedo STRING 型付きバッファは、NULL 文字で終端された文字列を格納する場合に使用します。Tuxedo STRING 型付きバッファは自己記述型バッファです。
STRING 型付きバッファを受け付ける TOUPPER Tuxedo サービスの例を以下に示します。SOAP メッセージの内容は以下のようになります。
<?xml … encoding=”UTF-8” ?>
……
<SOAP:body>
<m:TOUPPER xmlns:m=”urn:......”>
<inbuf>abcdefg</inbuf>
</m:TOUPPER>
</SOAP:body>
<xsd:element name=”inbuf” type=”xsd:string” />
Tuxedo CARRAY 型付きバッファは、文字配列を格納する場合に使用します。この配列は任意の位置に NULL を含むことができます。CARRAY はデータをオペークなものとして扱う場合に使用するバッファで、自己記述型ではありません。Tuxedo CARRAY 型付きバッファは、xsd:base64Binary または MIME 添付ファイルのいずれかにマッピングできます。デフォルトは xsd:base64Binary です。
コード リスト 2-2 に、base64Binary マッピングを使って CARRAY 型付きバッファを受け付ける TOUPPER Tuxedo サービスの SOAP メッセージの例を示します。
<SOAP:body>
<m:TOUPPER xmlns:m=”urn:......”>
<inbuf>QWxhZGRpbjpvcGVuIHNlc2FtZQ==</inbuf>
</m:TOUPPER>
</SOAP:body>
<xsd:element name=”inbuf” type=”xsd:base64Binary” />
コード リスト 2-3 に、MIME 添付ファイルとして CARRAY 型付きバッファを受け付ける TOUPPER Tuxedo サービスの SOAP メッセージの例を示します。
MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;
start="<claim061400a.xml@example.com>"
Content-Description: This is the optional message description.
--MIME_boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <claim061400a.xml@ example.com>
<?xml version='1.0' ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
..
<m:TOUPPER xmlns:m=”urn:…”>
<inbuf href="cid:claim061400a.carray@example.com"/>
</m:TOUPPER>
..
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
--MIME_boundary
Content-Type: text/xml
Content-Transfer-Encoding: binary
Content-ID: <claim061400a. carray @example.com>
...binary carray data…
--MIME_boundary--
The WSDL for carray typed buffer will look like the following:
<wsdl:definitions …>
<wsdl:types …>
<xsd:schema …>
<xsd:element name=”inbuf” type=”xsd:base64Binary” />
</xsd:schema>
</wsdl:types>
……
<wsdl:binding …>
<wsdl:operation name=”TOUPPER”>
<soap:operation …>
<input>
<mime:multipartRelated>
<mime:part>
<soap:body parts=”…” use=”…”/>
</mime:part>
<mime:part>
<mime:content part=”…” type=”text/xml”/>
</mime:part>
</mime:multipartRelated>
</input
……
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
Tuxedo MBSTRING 型付きバッファは、マルチバイト文字配列のために使用します。Tuxedo MBSTRING 型付きバッファは以下の 3 つの要素により構成されます。
| 注意 : | 「UTF-8」コードセット以外のマルチバイト文字列を SOAP メッセージ内に直接に埋め込むことはできません。 |
図 2-1 に、MBSTRING 型付きバッファを受け付ける MBSERVICE Tuxedo サービスの SOAP メッセージの例を示します。

<xsd:element name=”inbuf” type=”xsd:string” />
| 警告 : | Oracle SALT では、日本語文字の「―」(EUC-JP 0xa1bd、Shift-JIS 0x815c) は UTF-16 0x2015 に変換されます。 |
| 警告 : | 別の文字セット変換エンジンを使用する場合には、この文字に対する EUC-JP または Shift-JIS のマルチバイト出力は異なることがあります。たとえば、Java il8n 文字変換エンジンではこの記号が UTF-16 0x2014 に変換されます。この結果は、Oracle SALT のデフォルトである UTF-8 への変換についても同様です。 |
| 警告 : | 別の文字変換エンジンを使用する場合、MBSTRING に日本語文字の「―」が含まれている場合、TUXEDO サーバサイドの MBSTRING 自動変換機能で文字列を Shift-JIS または EUC-JP に戻すことはできません。 |
Tuxedo XML 型付きバッファは XML ドキュメントを格納します。
コード リスト 2-4 に、株価情報の XML ドキュメントの例を示します。
コード リスト 2-5 に、XML 型付きバッファを受け付ける STOCKINQ Tuxedo サービスの SOAP メッセージの例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 「株価情報」-->
<stockquotes>
<stock_quote>
<symbol>BEAS</symbol>
<when>
<date>01/27/2001</date>
<time>3:40PM</time>
</when>
<change>+2.1875</change>
<volume>7050200</volume>
</stock_quote>
</stockquotes>
この場合、SOAP メッセージの一部は以下のようになります。
<SOAP:body>
<m: STOCKINQ xmlns:m=”urn:......”>
<inbuf>
<stockquotes>
<stock_quote>
<symbol>BEAS</symbol>
<when>
<date>01/27/2001</date>
<time>3:40PM</time>
</when>
<change>+2.1875</change>
<volume>7050200</volume>
</stock_quote>
</stockquotes>
</inbuf>
</m: STOCKINQ >
</SOAP:body>
<xsd:element name=”inbuf” type=”xsd:anyType” />
| 注意 : | デフォルトのネームスペースが Tuxedo XML 型付きバッファに格納されて GWWS サーバに返されると、GWWS サーバはデフォルトのネームスペースを正規の名前に変換します。これにより、各要素にはその名前のプレフィックスが付加されます。 |
| 注意 : | たとえば、デフォルトのネームスペースを持つコード リスト 2-6 のようなバッファが Tuxedo サービスから GWWS サーバに返されると、GWWS サーバは、コード リスト 2-7 のようにデフォルトのネームスペースを正規の名前に変換します。 |
<Configuration xmlns="http://www.bea.com/Tuxedo/Salt/200606">
<Servicelist id="simpapp">
<Service name="toupper"/>
</Servicelist>
<Policy/>
<System/>
<WSGateway>
<GWInstance id="GWWS1">
<HTTP address="//myhost:8080"/>
</GWInstance>
</WSGateway>
</Configuration>
<dom0:Configuration
xmlns:dom0="http://www.bea.com/Tuxedo/Salt/200606">
<dom0:Servicelist dom0:id="simpapp">
<dom0:Service dom0:name="toupper"/>
</dom0:Servicelist>
<dom0:Policy></<dom0:Policy>
<dom0:System></<dom0:System>
<dom0:WSGateway>
<dom0:GWInstance dom0:id="GWWS1">
<dom0:HTTP dom0:address="//myhost:8080"/>
</dom0:GWInstance>
</dom0:WSGateway>
</dom0:Configuration>
Tuxedo VIEW および VIEW32 型付きバッファは、Tuxedo アプリケーションで定義した C 構造体を格納する場合に使用します。VIEW の構造は VIEW 定義ファイルによって定義する必要があります。VIEW バッファ型には複数のフィールドを定義できます。
コード リスト 2-8 に、MYVIEW という VIEW 定義ファイルの例を示します。
コード リスト 2-9 に、VIEW 型付きバッファを受け付ける MYVIEW Tuxedo サービスの SOAP メッセージの例を示します。
VIEW MYVIEW
#type cname fbname count flag size null
float float1 - 1 - - 0.0
double double1 - 1 - - 0.0
long long1 - 3 - - 0
string string1 - 2 - 20 '\0'
END
<SOAP:body>
<m: STOCKINQ xmlns:m=”http://......”>
<inbuf>
<float1>12.5633</float1>
<double1>1.3522E+5</double1>
<long1>1000</long1>
<long1>2000</long1>
<long1>3000</long1>
<string1>abcd</string1>
<string1>ubook</string1>
</inbuf>
</m: STOCKINQ >
</SOAP:body>
<inbuf> の XML スキーマをコード リスト 2-10 に示します。
<xsd:complexType name=” view_MYVIEW”>
<xsd:sequence>
<xsd:element name=”float1” type=”xsd:float” />
<xsd:xsd:element name=”double1” type=”xsd:double” />
<xsd:element name=”long1” type=”xsd:long” minOccurs=”3” />
<xsd:element name=”string1” type=”xsd:string minOccurs=”3” />
</xsd:sequence>
</xsd: complexType >
<xsd:element name=”inbuf” type=”tuxtype:view_MYVIEW” />
Tuxedo VIEW/VIEW32 バッファと XML との変換に関しては、以下の点を考慮する必要があります。
不整合な点が見つかった場合、GWWS サーバは起動できません。不整合に関するメッセージが ULOG ファイルに出力されます。
tmwsdlgen も同じように、起動時に Tuxedo サービス メタデータ リポジトリの VIEW/VIEW32 パラメータ定義と VIEW/VIEW32 定義ファイルとの整合性の厳格なチェックを提供します。不整合な点が見つかった場合、GWWS サーバは起動できません。不整合に関するメッセージが ULOG ファイルに出力されます。
VIEW 定義ファイルをロードできない場合、tmwsdlgen は Tuxedo サービス メタデータ リポジトリの定義を使って WSDL ドキュメントの作成を試みます。
dec_t はサポートされていないため、dec_t 型の VIEW フィールドを定義している場合、サービスを Web サービスとしてエクスポートできず、Oracle SALT コンフィグレーション ファイルのロード中にエラー メッセージが生成されます。xsd:long スキーマ型で 64 ビットの数値を表現できます。
GWWS サーバが 32 ビット モードで動作している場合、Web サービスのクライアントから 32 ビットの範囲を超えた値を持つ xsd:long 型データが送信されると、SOAP エラーが発生することがあります。
Tuxedo FML および FML32 タイプ バッファは、Oracle Tuxedo システムに特有の自己記述型バッファです。データ フィールドごとに個別の識別子、出現回数、および必要に応じて長さを示す情報を保持します。
コード リスト 2-11 に、FML 型付きバッファを受け付ける TRANSFER Tuxedo サービスの SOAP メッセージの例を示します。
LOGIN サービスでは以下のリクエスト フィールドが使われています。
ACCOUNT_ID 1 long /* 2 回出現。1 つ目が振替元口座、2 つ目が振替先口座 */
AMOUNT 2 float /* 振替金額 */
<SOAP:body>
<m:TRANSFER xmlns:m=”urn:......”>
<inbuf>
<ACCOUNT_ID>40069901</ACCOUNT_ID>
<ACCOUNT_ID>40069901</ACCOUNT_ID>
<AMOUNT>200.15</AMOUNT>
</inbuf>
</m:TRANSFER >
</SOAP:body>
<inbuf> の XML スキーマをコード リスト 2-12 に示します。
<xsd:complexType name=” fml_TRANSFER_In”>
<xsd:sequence>
<xsd:element name=”ACCOUNT_ID” type=”xsd:long” minOccurs=”2”/>
<xsd:element name=” AMOUNT” type=”xsd:float” />
</xsd:sequence>
</xsd: complexType >
<xsd:element name=”inbuf” type=”tuxtype: fml_TRANSFER_In” />
コード リスト 2-13 に、FML32 型付きバッファを受け付ける TRANSFER Tuxedo サービスの SOAP メッセージの例を示します。
LOGIN サービスでは以下のリクエスト フィールドが使われています。
CUST_INFO 1 fml32 /* 2 回出現。1 つ目が振替元の顧客、2 つ目が振替先の顧客 */
ACCOUNT_INFO 2 fml32 /* 2 回出現。1 つ目が振替元口座、2 つ目が振替先口座 */
AMOUNT 3 float /* 振替金額 */
埋め込まれている各 CUST_INFO には、以下のフィールドがあります。
CUST_NAME 10 string
CUST_ADDRESS 11 carray
CUST_PHONE 12 long
埋め込まれている各 ACCOUNT_INFO には、以下のフィールドがあります。
ACCOUNT_ID 20 long
ACCOUNT_PW 21 carray
<SOAP:body>
<m:STOCKINQ xmlns:m=”urn:......”>
<inbuf>
<CUST_INFO>
<CUST_NAME>John</CUST_NAME>
<CUST_ADDRESS>Building 15</CUST_ADDRESS>
<CUST_PHONE>1321</CUST_PHONE>
</CUST_INFO>
<CUST_INFO>
<CUST_NAME>Tom</CUST_NAME>
<CUST_ADDRESS>Building 11</CUST_ADDRESS>
<CUST_PHONE>1521</CUST_PHONE>
</CUST_INFO>
<ACCOUNT_INFO>
<ACCOUNT_ID>40069901</ACCOUNT_ID>
<ACCOUNT_PW>abc</ACCOUNT_PW>
</ACCOUNT_INFO>
<ACCOUNT_INFO>
<ACCOUNT_ID>40069901</ACCOUNT_ID>
<ACCOUNT_PW>zyx</ACCOUNT_PW>
</ACCOUNT_INFO>
<AMOUNT>200.15</AMOUNT>
</inbuf>
</m: STOCKINQ >
</SOAP:body>
<inbuf> の XML スキーマをコード リスト 2-14 に示します。
<xsd:complexType name=”fml32_TRANSFER_In”>
<xsd:sequence>
<xsd:element name=”CUST_INFO” type=”tuxtype:fml32_TRANSFER_p1” minOccurs=”2”/>
<xsd:element name=”ACCOUNT_INFO” type=”tuxtype:fml32_TRANSFER_p2” minOccurs=”2”/>
<xsd:element name=”AMOUNT” type=”xsd:float” />
/xsd:sequence>
</xsd:complexType >
<xsd:complexType name=”fml32_TRANSFER_p1”>
<xsd:element name=”CUST_NAME” type=”xsd:string” />
<xsd:element name=”CUST_ADDRESS” type=”xsd:base64Binary” />
<xsd:element name=”CUST_PHONE” type=”xsd:long” />
</xsd:complexType>
<xsd:complexType name=”fml32_TRANSFER_p2”>
<xsd:element name=”ACCOUNT_ID” type=”xsd:long” />
<xsd:element name=”ACCOUNT_PW” type=”xsd:base64Binary” />
</xsd:complexType>
<xsd:element name=”inbuf” type=”tuxtype: fml32_TRANSFER_In” />
Tuxedo FML/FML32 バッファと XML との変換に関しては、以下の点を考慮する必要があります。
FLD_PTR はサポートされていません。
環境設定に準拠していない FML/32 フィールドが見付かった場合、またはフィールド テーブルのフィールド データ型定義が Tuxedo サービス メタデータ リポジトリのパラメータ データ型定義と異なる場合、GWWS は起動できません。不整合に関するメッセージが ULOG ファイルに出力されます。
tmwsdlgen コマンドによって、Tuxedo サービス メタデータ リポジトリの FML/FML32 パラメータ定義と FML/FML32 定義ファイルとの整合性がチェックされます。不整合な点が見つかった場合、警告のみが表示され、不整合が許容されます。
環境設定に準拠していない FML/32 フィールドが見付かった場合、またはフィールド テーブルのフィールド データ型定義が Tuxedo サービス メタデータ リポジトリのパラメータ データ型定義と異なる場合、tmwsdlgen は Tuxedo サービス メタデータ リポジトリの定義を使って WSDL ドキュメントの作成を試みます。
xsd:long スキーマ型は 64 ビットの数値を表現できます。次の状況では SOAP エラーが生成されます。
GWWS サーバが 32 ビット モードで動作している場合、Web サービスのクライアントから 32 ビットの範囲を超えた値を持つ xsd:long 型データが送信されます。
Tuxedo X_C_TYPE 型付きバッファは、Tuxedo VIEW 型付きバッファと同等であり、WSDL の書式も同様になります。SOAP クライアントがこれらの型を区別する必要はありません。使用方法は Tuxedo VIEW バッファ型に似ていますが、SALT 管理者は、このバッファ型を使用する個々の Tuxedo サービスについて Tuxedo サービス メタデータ リポジトリを適切にコンフィグレーションする必要があります。
| 注意 : | VIEW に関して考慮する必要があるすべての事項は、X_C_TYPE 型付きバッファにも該当します。 |
Tuxedo X_COMMON 型付きバッファは、Tuxedo VIEW 型付きバッファと同等です。ただし、この型は COBOL と C プログラムとの間で互換性を確保する場合に使用するものです。フィールドの型としては short、long、string のみ使用します。
Tuxedo X_OCTET 型付きバッファは、CARRAY と同等です。
| 注意 : | Tuxedo X_OCTET 型付きバッファ対象は xsd:base64Binary 型にのみマッピングできます。SALT 1.1 では、Tuxedo X_OCTET 型付きバッファと MIME 添付ファイルとのバインディングがサポートされていません。 |
Oracle SALT には、カスタム型付きバッファをサポートするためのプラグイン メカニズムがあります。これにより、独自の XML スキーマ定義に対する SOAP メッセージの検証、カスタム型付きバッファの割り当て、データの解析とバッファへの変換、およびその他の操作ができます。
XML スキーマの組み込み型である xsd:anyType 型がこれに対応し、SOAP メッセージに格納された XML ドキュメントを表します。カスタム型付きバッファを使用する際は、実際のデータを XML 形式で定義および表現し、それを Web サービスのクライアントと Tuxedo Web サービス スタックとの間で伝送するようにします。XML 型付きバッファの場合と同様に、SOAP 本文には単一ルートの XML バッファのみ格納できます。この点は、整合性を保つため GWWS によりチェックされます。
プラグインの詳細については、「Oracle SALT プラグインの使用」を参照してください。
Oracle SALT では、各 wsdl:message が Tuxedo FML32 バッファ構造としてマップされます。Oracle SALT には、FML32 を使用して XML スキーマ定義を表すためのルール セットが提供されています。外部 Web サービスを呼び出すには、顧客は、対応するメッセージの外部 Web サービスの XML スキーマ定義から変換された FML32 構造を理解する必要があります。
以下の節では、Tuxedo FML32 バッファ マッピング ルールの WSDL メッセージについて説明します。
表 2-3 に、サポート対象の XML スキーマの組み込み単純なデータ型および対応する Tuxedo FML32 のフィールド データ型を示します。
以下のサンプルでは、XML スキーマの組み込み単純な型の Tuxedo プログラムでデータを作成する方法を示します。
表 2-9 に、サポート対象の XML スキーマのユーザ定義単純なデータ型および対応する Tuxedo FML32 のフィールド データ型を示します。
<xsd:anyType> |
FLD_MBSTRING |
char [] |
|
以下のサンプルでは、XML スキーマのユーザ定義データ型の Tuxedo プログラムでデータを作成する方法を示します。
常に、Tuxedo FML32 バッファ型が WSDL メッセージのマッピングに使用されます。
表 2-12 に、Oracle SALT によって定義された WSDL メッセージのマッピング ルールの一覧を示します。
Tuxedo リクエスト バッファ (入力バッファ) |
||
faultcode string - - |
||
|