プログラミング ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

データ型のマッピングとメッセージ変換

この節では、以下のトピックを取り上げます。

 


データ型のマッピングとメッセージ変換の概要

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 のメッセージ変換について

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 つの場合に行われます。

以下の表では、着信メッセージ変換プロセスと発信メッセージ変換プロセスを比較しています。

表 2-1 着信メッセージ変換と発信メッセージ変換
着信メッセージ変換
発信メッセージ変換
SOAP メッセージ ペイロードは <inbuf>、<outbuf> や <errbuf> でカプセル化される。
SOAP メッセージ ペイロードは <soap:body> 全体である。
変換は「Tuxedo-to-XML データ型マッピング ルール」に従って行う。
変換は「XML-to-Tuxedo データ型マッピング ルール」に従って行う。
Tuxedo バッファのすべてのタイプが含まれる。
Tuxedo FML32 バッファ タイプのみが含まれる。

 


Tuxedo サービス用 Tuxedo-to-XML データ型のマッピング

Oracle SALT には、Tuxedo タイプ バッファを XML ドキュメントで記述するためのルール セットが提供されています。それらのルールは、SALT WSDL ドキュメント内の XML スキーマ定義としてエクスポートされます。そのため、Tuxedo のバッファ型に関する知識をあらかじめ備えていなくても簡単にバッファの変換を実行できます。

表 2-2 Tuxedo のバッファと XML スキーマとのマッピング
Tuxedo のバッファ型
説明
SOAP メッセージの XML スキーマ マッピング
STRING
Tuxedo STRING 型付きバッファは、NULL 文字で終端された文字列を格納する場合に使用する。Tuxedo STRING 型付きバッファは自己記述型バッファである。
xsd:string
SOAP メッセージ内では、実際の文字列データをカプセル化する XML 要素を、xsd:string を使用して直接に定義する必要がある。
注意 :
  • STRING データ型には、Tuxedo サービス メタデータ リポジトリにおいてデータの最大長を指定できる。これが Tuxedo で定義されている場合、対応する SOAP メッセージにも同じ最大長の制限が適用される。GWWS サーバにより、実際のメッセージ バイト長が Tuxedo サービス メタデータ リポジトリの定義に対して検証される。メッセージのバイト長がサポート可能な最大長を超える場合は、SOAP エラーのメッセージが返される。
  • GWWS サーバが「UTF-8」以外の SOAP メッセージを受け取る場合は、対応する文字列値のエンコーディングは同じである。
CARRAY
(SOAP Message plus Attachments とのマッピング)
Tuxedo CARRAY 型付きバッファには文字配列が格納される。この配列内には任意の位置に NULL を含んでよい。CARRAY バッファはデータをオペークなものとして扱うバッファで、自己記述型ではない。
CARRAY バッファの生のデータは、「SOAP Messages with Attachments」仕様で定義された形式の MIME multipart/related メッセージとして保持される。
MIME Content-Type 添付ファイルを以下の 2 つのデータ形式にサポートされている。
  • application/octet-stream
    • Apache Axis 用
  • text/xml
    • Oracle WebLogic Server 用
形式は、Web サービス クライアントサイド ツールキットの使用による。

注意 : この SOAP with Attachment ルールは、Oracle WebLogic Server および Apache Axis のみに対して相互運用性を持つ。

注意 : CARRAY データ型には、最大バイト長を指定できる。これが Tuxedo で定義されている場合、対応する SOAP メッセージにも同じ最大長の制限が適用される。GWWS サーバにより、実際のメッセージ バイト長が Tuxedo サービス メタデータ リポジトリの定義に対して検証される。

CARRAY
(base64Binary とのマッピング)
Tuxedo CARRAY 型付きバッファには文字配列が格納される。この配列内には任意の位置に NULL を含んでよい。CARRAY バッファはデータをオペークなものとして扱うバッファで、自己記述型ではない。
xsd:base64Binary
CARRAY のデータ バイトは、SOAP メッセージ内に埋め込む前に base64Binary でエンコードされる必要がある。このオペークなデータ ストリームに対して base64Binary エンコーディングを使うことにより、元のデータの内容を維持したまま、整形式かつ判読可能な形でデータを埋め込むことができる。
SOAP メッセージ内では、実際の CARRAY データをカプセル化する XML 要素を xsd:base64Binary によって直接に定義する必要がある。

注意 : CARRAY データ型には、最大バイト長を指定できる。これが Tuxedo で定義されている場合、対応する SOAP メッセージにも同じ最大長の制限が適用される。GWWS サーバにより、実際のメッセージ バイト長が Tuxedo サービス メタデータ リポジトリの定義に対して検証される。

MBSTRING
Tuxedo MBSTRING 型付きバッファは、マルチバイト文字配列のために使用する。Tuxedo MBSTRING バッファは以下の 3 つの要素により構成される。
  • コードセット文字エンコーディング
  • データ長
  • 指定したエンコーディングによる文字配列
xsd:string
XML スキーマの組み込み型である xsd:string がこれに対応し、SOAP メッセージに格納されたバッファ データに対応する型を表す。
GWWS サーバは、「UTF-8」でエンコードされた XML ドキュメントのみ受け付ける。Web サービスのクライアントが MBSTRING バッファを使用する Tuxedo サービスにアクセスする場合、SOAP リクエスト メッセージ内ではマルチバイト文字列のペイロードが「UTF-8」エンコーディングで表現されている必要がある。

注意 : GWWS サーバでは、「UTF-8」文字セットの文字列をそのまま MBSTRING 型付きバッファの形式で Tuxedo サービスに渡す。実際の Tuxedo サービスによって、UTF-8 文字列が実行される。

Tuxedo 応答として返されるすべての MBSTRING 型付きバッファ (任意のエンコーディング文字セットによる) について、GWWS サーバは文字列のエンコーディングを自動的に「UTF-8」に変換してから Web サービスのクライアントに送り返す。
MBSTRING (続き)
 
制限事項 :
Tuxedo MBSTRING データ型には、Tuxedo サービス メタデータ リポジトリにおいて最大バイト長を指定できる。GWWS サーバは変換された MBSTRING バッファの値のバイト長をチェックする。

注意 : SOAP メッセージ内で含まれている文字数に対して最大バイト長の値が適用されない。

XML
Tuxedo XML 型付きバッファは XML ドキュメントを格納する。
xsd:anyType
XML スキーマの組み込み型である xsd:anyType 型がこれに対応し、SOAP メッセージに格納された XML ドキュメントに対応する型を表す。この型を使用すると、すべての整形式 XML データを SOAP メッセージ内でカプセル化できる。
制限事項 :
GWWS サーバでは、実際の XML データが整形式かどうかについてのみ検証が行われる。それ以外の事項 (スキーマ検証など) の適用については確認されない。
SOAP 本文には、単一ルートの XML バッファのみを格納できる。この点は GWWS サーバによりチェックされる。
実際の XML データは「UTF-8」文字セットでエンコードされている必要がある。元の XML ドキュメントに含まれるプロローグ情報は、SOAP メッセージに含めて伝送することはできない。
XML データ型には、データの最大バイト長を指定できる。これが Tuxedo で定義されている場合、対応する SOAP メッセージにも同じ最大長の制限を適用する必要がある。

注意 : Oracle SALT の WSDL ジェネレータで生成される WSDL ドキュメントには、最大長を制限する xsd:maxLength の指定が含まれない。ただし、GWWS サーバにより、バイト長が Tuxedo サービス メタデータ リポジトリの定義に対して検証される。

X_C_TYPE
X_C_TYPE バッファ型は VIEW バッファ型と同等である。
VIEW/VIEW32 を参照
X_COMMON
X_COMMON バッファ型は VIEW バッファ型と同等だが、COBOL プログラムと C プログラムとの間で互換性を確保する場合に使用する。フィールドの型としては short、long、string のみを使用する。
VIEW/VIEW32 を参照
X_OCTET
X_OCTET バッファ型は CARRAY バッファ型と同等である。
CARRAY xsd:base64Binary を参照
VIEW/VIEW32
Tuxedo VIEW および VIEW32 型付きバッファは、Tuxedo アプリケーションで定義した C 構造体を格納する。
VIEW 構造は、VIEW 定義ファイルを使用して定義される。VIEW バッファ型には複数のフィールドを定義できる。
VIEW では以下のフィールド型がサポートされている。
  • short
  • int
  • long
  • float
  • double
  • char
  • string
  • carray
VIEW32 では、すべての VIEW フィールド型と mbstring がサポートされている。
VIEW または VIEW32 の各データ型は、XML スキーマの複合型として定義される。VIEW の各フィールドが、XML スキーマの複合型における 1 つまたは複数のサブ要素に対応する。サブ要素の名前は VIEW フィールド名と同じ。サブ要素の出現回数は、VIEW フィールド定義の count 属性によって決まる。サブ要素の値は、XML スキーマの型に対応する VIEW フィールド データ型で表する必要がある。
フィールドの型とそれに対応する XML スキーマ型の一覧を以下に示す。
  • shortxsd:short に対応する
  • intxsd:int に対応する
  • longxsd:long に対応する
  • floatxsd:float に対応する
  • doublexsd:double に対応する
  • char (Tuxedo サービス メタデータ リポジトリにおける byte) xsd:byte に対応する
  • char (Tuxedo サービス メタデータ リポジトリにおける char) は xsd:string (maxlength=1 の制限付き) に対応する
  • stringxsd:string に対応する
  • carrayxsd:base64Binary に対応する
  • mbstringxsd:string に対応する
VIEW/VIEW32 (続き)
 
詳細については、「VIEW/VIEW32 に関する考慮事項」を参照。
FML/FML32
Tuxedo FML および FML32 タイプ バッファは、Oracle Tuxedo システムに特有の自己記述型バッファである。データ フィールドごとに個別の識別子、出現回数、および必要に応じて長さを示す情報を保持する。
FML では以下のフィールド型がサポートされている。
  • FLD_CHAR
  • FLD_SHORT
  • FLD_LONG
  • FLD_FLOAT
  • FLD_DOUBLE
  • FLD_STRING
  • FLD_CARRAY
FML32 では、すべての FML フィールド型と FLD_PTR、FLD_MBSTRING、FLD_FML32、FLD_VIEW32 がサポートされている。
FML/FML32 バッファには、基本フィールド データごとに、データ ディクショナリに似た基本的な定義のみを指定できる。異なる型名を持つ FML/FML32 バッファごとに、特定の FML/FML32 バッファ定義を適用する必要がある。
FML/FML32 の各フィールドは、その FML/FML32 バッファ XML スキーマ型における 1 つまたは複数のサブ要素に対応する。サブ要素の名前は FML フィールド名と同じ。サブ要素の出現回数は、FML/FML32 フィールド定義の count 属性および requiredcount 属性によって決まる。
フィールドの型とそれに対応する XML スキーマ型の一覧を以下に示す。
  • shortxsd:short に対応する
  • intxsd:int に対応する
  • longxsd:long に対応する
  • floatxsd:float に対応する
  • doublexsd:double に対応する
  • char (Tuxedo サービス メタデータ リポジトリ定義における byte) は xsd:byte に対応する
  • char (Tuxedo サービス メタデータ リポジトリ定義における char) は xsd:string に対応する
  • stringxsd:string に対応する
  • carrayxsd:base64Binary に対応する
  • mbstringxsd:string に対応する
FML/FML32
(続き)
 
  • view32tuxtype:view <viewname> に対応する
  • fml32tuxtype:fml32 <svcname>_p<SeqNum> に対応する
  • FML32 バッファ内に複数の FML32 バッファが埋め込まれるのを防ぐために、埋め込み FML32 バッファを識別するユニークなシーケンス番号 (<SeqNum>) を使用する。

注意 : ptr はサポートされていない。

FML/FML32 バッファのマッピングに関する制限事項および考慮事項については、「FML/FML32 に関する考慮事項」を参照。

Tuxedo STRING 型付きバッファ

Tuxedo STRING 型付きバッファは、NULL 文字で終端された文字列を格納する場合に使用します。Tuxedo STRING 型付きバッファは自己記述型バッファです。

STRING 型付きバッファを受け付ける TOUPPER Tuxedo サービスの例を以下に示します。SOAP メッセージの内容は以下のようになります。

コード リスト 2-1 TOUPPER サービスでの STRING 型付きバッファに対する Soap メッセージ
<?xml … encoding=”UTF-8” ?>
   ……
   <SOAP:body>
      <m:TOUPPER xmlns:m=”urn:......”>
           <inbuf>abcdefg</inbuf>
      </m:TOUPPER>
   </SOAP:body>

<inbuf> の XML スキーマは以下のとおりです。

<xsd:element  name=”inbuf” type=”xsd:string” />

Tuxedo CARRAY 型付きバッファ

Tuxedo CARRAY 型付きバッファは、文字配列を格納する場合に使用します。この配列は任意の位置に NULL を含むことができます。CARRAY はデータをオペークなものとして扱う場合に使用するバッファで、自己記述型ではありません。Tuxedo CARRAY 型付きバッファは、xsd:base64Binary または MIME 添付ファイルのいずれかにマッピングできます。デフォルトは xsd:base64Binary です。

base64Binary を使用するマッピングの例

コード リスト 2-2 に、base64Binary マッピングを使って CARRAY 型付きバッファを受け付ける TOUPPER Tuxedo サービスの SOAP メッセージの例を示します。

コード リスト 2-2 base64Binary マッピングを使用する CARRAY 型付きバッファの SOAP メッセージ
<SOAP:body>
       <m:TOUPPER xmlns:m=”urn:......”>
              <inbuf>QWxhZGRpbjpvcGVuIHNlc2FtZQ==</inbuf>
       </m:TOUPPER>
</SOAP:body>

<inbuf> の XML スキーマは以下のとおりです。

<xsd:element  name=”inbuf” type=”xsd:base64Binary” />

MIME 添付ファイルを使用するマッピングの例

コード リスト 2-3 に、MIME 添付ファイルとして CARRAY 型付きバッファを受け付ける TOUPPER Tuxedo サービスの SOAP メッセージの例を示します。

コード リスト 2-3 MIME 添付ファイルを使用する CARRAY 型付きバッファの 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 型付きバッファは、マルチバイト文字配列のために使用します。Tuxedo MBSTRING 型付きバッファは以下の 3 つの要素により構成されます。

注意 : 「UTF-8」コードセット以外のマルチバイト文字列を SOAP メッセージ内に直接に埋め込むことはできません。

図 2-1 に、MBSTRING 型付きバッファを受け付ける MBSERVICE Tuxedo サービスの SOAP メッセージの例を示します。

図 2-1 MBSTRING バッファの SOAP メッセージ

MBSTRING バッファの SOAP メッセージ

<inbuf> の XML スキーマは以下のとおりです。

<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 型付きバッファ

Tuxedo XML 型付きバッファは XML ドキュメントを格納します。

コード リスト 2-4 に、株価情報の XML ドキュメントの例を示します。

コード リスト 2-5 に、XML 型付きバッファを受け付ける STOCKINQ Tuxedo サービスの SOAP メッセージの例を示します。

コード リスト 2-4 株価情報の XML ドキュメント
<?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 メッセージの一部は以下のようになります。

コード リスト 2-5 XML バッファの 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>

<inbuf> の XML スキーマは以下のとおりです。

<xsd:element  name=”inbuf” type=”xsd:anyType” />
注意 : デフォルトのネームスペースが Tuxedo XML 型付きバッファに格納されて GWWS サーバに返されると、GWWS サーバはデフォルトのネームスペースを正規の名前に変換します。これにより、各要素にはその名前のプレフィックスが付加されます。
注意 : たとえば、デフォルトのネームスペースを持つコード リスト 2-6 のようなバッファが Tuxedo サービスから GWWS サーバに返されると、GWWS サーバは、コード リスト 2-7 のようにデフォルトのネームスペースを正規の名前に変換します。
コード リスト 2-6 GWWS サーバに送信される前のデフォルトのネームスペース
<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>
コード リスト 2-7 GWWS サーバによりデフォルトのネームスペースの正規の名前に変換
	<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 VIEW および VIEW32 型付きバッファは、Tuxedo アプリケーションで定義した C 構造体を格納する場合に使用します。VIEW の構造は VIEW 定義ファイルによって定義する必要があります。VIEW バッファ型には複数のフィールドを定義できます。

コード リスト 2-8 に、MYVIEW という VIEW 定義ファイルの例を示します。

コード リスト 2-9 に、VIEW 型付きバッファを受け付ける MYVIEW Tuxedo サービスの SOAP メッセージの例を示します。

コード リスト 2-8 MYVIEW サービスの VIEW 定義ファイル
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
コード リスト 2-9 VIEW 型付きバッファの SOAP メッセージ
<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 に示します。

コード リスト 2-10 VIEW 型付きバッファの XML スキーマ
<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” />

VIEW/VIEW32 に関する考慮事項

Tuxedo VIEW/VIEW32 バッファと XML との変換に関しては、以下の点を考慮する必要があります。

Tuxedo FML/FML32 型付きバッファ

Tuxedo FML および FML32 タイプ バッファは、Oracle Tuxedo システムに特有の自己記述型バッファです。データ フィールドごとに個別の識別子、出現回数、および必要に応じて長さを示す情報を保持します。

FML データ マッピングの例

コード リスト 2-11 に、FML 型付きバッファを受け付ける TRANSFER Tuxedo サービスの SOAP メッセージの例を示します。

LOGIN サービスでは以下のリクエスト フィールドが使われています。

ACCOUNT_ID        1       long              /* 2 回出現。1 つ目が振替元口座、2 つ目が振替先口座  */
AMOUNT 2 float /* 振替金額 */

SOAP メッセージの一部は以下のようになります。

コード リスト 2-11 FML 型付きバッファの SOAP メッセージ
<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 に示します。

コード リスト 2-12 FML 型付きバッファの XML スキーマ
<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” />

FML32 データ マッピングの例

コード リスト 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 メッセージの一部は以下のようになります。

コード リスト 2-13 FML32 バッファを使用するサービスの SOAP メッセージ
<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 に示します。

コード リスト 2-14 FML32 バッファの XML スキーマ
<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” />

FML/FML32 に関する考慮事項

Tuxedo FML/FML32 バッファと XML との変換に関しては、以下の点を考慮する必要があります。

Tuxedo X_C_TYPE 型付きバッファ

Tuxedo X_C_TYPE 型付きバッファは、Tuxedo VIEW 型付きバッファと同等であり、WSDL の書式も同様になります。SOAP クライアントがこれらの型を区別する必要はありません。使用方法は Tuxedo VIEW バッファ型に似ていますが、SALT 管理者は、このバッファ型を使用する個々の Tuxedo サービスについて Tuxedo サービス メタデータ リポジトリを適切にコンフィグレーションする必要があります。

注意 : VIEW に関して考慮する必要があるすべての事項は、X_C_TYPE 型付きバッファにも該当します。

Tuxedo X_COMMON 型付きバッファ

Tuxedo X_COMMON 型付きバッファは、Tuxedo VIEW 型付きバッファと同等です。ただし、この型は COBOL と C プログラムとの間で互換性を確保する場合に使用するものです。フィールドの型としては short、long、string のみ使用します。

Tuxedo X_OCTET 型付きバッファ

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 プラグインの使用」を参照してください。

 


外部 Web サービス用 XML-to-Tuxedo データ型のマッピング

Oracle SALT では、各 wsdl:message が Tuxedo FML32 バッファ構造としてマップされます。Oracle SALT には、FML32 を使用して XML スキーマ定義を表すためのルール セットが提供されています。外部 Web サービスを呼び出すには、顧客は、対応するメッセージの外部 Web サービスの XML スキーマ定義から変換された FML32 構造を理解する必要があります。

以下の節では、Tuxedo FML32 バッファ マッピング ルールの WSDL メッセージについて説明します。

XML スキーマの組み込み単純なデータ型のマッピング

表 2-3 に、サポート対象の XML スキーマの組み込み単純なデータ型および対応する Tuxedo FML32 のフィールド データ型を示します。

表 2-3 サポート対象の XML スキーマの組み込み単純なデータ型
XML スキーマの組み込み
単純な型
Tuxedo FML32 のフィールド データ型
Tuxedo プログラムの C/C++ プリミティブ型
注意
xsd:byte
FLD_CHAR
char
 
xsd:unsignedByte
FLD_CHAR
unsigned char
 
xsd:boolean
FLD_CHAR
char
値のパターン
[ ‘T’ | ‘F’ ]
xsd:short
FLD_SHORT
short
 
xsd:unsignedShort
FLD_SHORT
unsigned short
 
xsd:int
FLD_LONG
long
 
xsd:unsignedInt
FLD_LONG
unsigned long
 
xsd:long
FLD_LONG
long
32 ビット スコープの Tuxedo プログラムでは、C プリミティブ型である longxsd:long のすべての有効な値を表現できない。
xsd:unsignedLong
FLD_LONG
unsigned long
32 ビット スコープの Tuxedo プログラムでは、C プリミティブ型である unsigned longxsd:long のすべての有効な値を表現できない。
xsd:float
FLD_FLOAT
float
 
xsd:double
FLD_DOUBLE
double
 
xsd:string
(および xsd:string から派生されたすべての組み込み型 (xsd:tokenxsd:Name など))
FLD_STRING
FLD_MBSTRING
char [ ]
(NULL で終わる文字列)
xsd:stringwsdlcvt を使用して FLD_STRING または FLD_MBSTRING としてマップできる。
xsd:base64Binary
FLD_CARRAY
char [ ]
 
xsd:hexBinary
FLD_CARRAY
char [ ]
 
他のすべての組み込みデータ型
(Data / Time 関連、decimal / Integer 関連、anyURI、QName、NOTATION)
FLD_STRING
char [ ]
対応する XML 組み込みデータ型の値パターンに準拠する必要がある。そうしないと、サーバサイドの Web サービスは要求を受け付けない。

以下のサンプルでは、XML スキーマの組み込み単純な型の Tuxedo プログラムでデータを作成する方法を示します。

XML スキーマのユーザ定義データ型のマッピング

表 2-9 に、サポート対象の XML スキーマのユーザ定義単純なデータ型および対応する Tuxedo FML32 のフィールド データ型を示します。

表 2-9 サポート対象の XML スキーマのユーザ定義データ型
XML スキーマのユーザ定義
データ型
Tuxedo FML32 のフィールド データ型
Tuxedo プログラムの C/C++ プリミティブ型
注意
<xsd:anyType>
FLD_MBSTRING
char []
Tuxedo プログラマは、要素タグがある全文の XML ドキュメントを作成する必要がある。
組み込みプリミティブで単純なデータ型から派生した <xsd:simpleType>
プリミティブで単純な型の同等な FML32 フィールド型 (表 2-3 の参照)
プリミティブで単純な型の同等な C プリミティブ データ型 (表 2-3 の参照)
<xsd:restriction> で定義されているファセットは Tuxedo サイドに適用されない。
<xsd:list> で定義された <xsd:simpleType>
FLD_MBSTRING
char []
<xsd:anyType> と同じである。スキーマのコンプライアンスは Tuxedo サイドに適用されない。
<xsd:union> で定義された <xsd:simpleType>
FLD_MBSTRING
char []
<xsd:anyType> と同じである。スキーマのコンプライアンスは Tuxedo サイドに適用されない。
<xsd:simpleContent> で定義された <xsd:complexType>
FLD_MBSTRING
char []
<xsd:anyType> と同じである。スキーマのコンプライアンスは Tuxedo サイドに適用されない。
<xsd:complexContent> で定義された <xsd:complexType>
FLD_MBSTRING
char []
<xsd:anyType> と同じである。スキーマのコンプライアンスは Tuxedo サイドに適用されない。
概略の <xsd:complexContent> で定義された <xsd:complexType>sequence または all で構成されたサブ要素
FLD_FML32
FBFR32 * 埋め込み fml32 バッファ
複合型の各サブ要素は埋め込み FML32 フィールドとして定義される。
概略の <xsd:complexContent> で定義された <xsd:complexType>choice で構成されたサブ要素
FML_FML32
FBFR32 * 埋め込み fml32 バッファ
複合型の各サブ要素は埋め込み FML32 フィールドとして定義される。
Tuxedo プログラマは fml32 バッファに 1 つのサブ フィールドのみ追加する必要がある。

以下のサンプルでは、XML スキーマのユーザ定義データ型の Tuxedo プログラムでデータを作成する方法を示します。

WSDL メッセージのマッピング

常に、Tuxedo FML32 バッファ型が WSDL メッセージのマッピングに使用されます。

表 2-12 に、Oracle SALT によって定義された WSDL メッセージのマッピング ルールの一覧を示します。

表 2-12 WSDL メッセージのマッピング ルール
WSDL メッセージ定義
Tuxedo バッファ/フィールド定義
注意
<wsdl:input> メッセージ
Tuxedo リクエスト バッファ (入力バッファ)
 
<wsdl:output> メッセージ
TPSUCCESS との Tuxedo 応答バッファ (出力バッファ)
 
<wsdl:fault> メッセージ
TPFAIL との Tuxedo 応答バッファ (エラー バッファ)
 
<wsdl:input> または <wsdl:output> で定義されている各メッセージ
Tuxedo FML32 バッファで最上位フィールドとしてマップされる。フィールド型は XML データ型のメッセージ部の FML32 フィールド型と同等。(表 2-3 および表 2-9 を参照)
 
SOAP 1.1 エラー メッセージの <faultcode>
Tuxedo エラー バッファで固定の最上位 FLD_STRING フィールド (faultcode) としてマップされる。
faultcode string - -
このマッピング ルールは SOAP 1.1 にのみ適用する。
SOAP 1.1 エラー メッセージの <faultstring>
Tuxedo エラー バッファで固定の最上位 FLD_STRING フィールド (faultstring) としてマップされる。
faultstring string - -
このマッピング ルールは SOAP 1.1 にのみ適用する。
SOAP 1.1 エラー メッセージの <faultactor>
Tuxedo エラー バッファで固定の最上位 FLD_STRING フィールド (faultactor) としてマップされる。
faultactor string - -
このマッピング ルールは SOAP 1.1 にのみ適用する。
SOAP 1.2 エラー メッセージの <Code>
Tuxedo エラー バッファで、2 つの固定のサブ FLD_STRING フィールド (Value および Subcode) を含む固定の最上位 FLD_FML32 フィールド (Code) としてマップされる。
Code fml32 - -
Value string - -
Subcode string - -
このマッピング ルールは SOAP 1.2 にのみ適用する。
SOAP 1.2 エラー メッセージの <Reason>
Tuxedo エラー バッファで、ゼロまたは複数の固定のサブ FLD_STRING フィールド (Text) を含む固定の最上位 FLD_FML32 フィールド (Reason) としてマップされる。
Reason fml32 - -
Text string - -
このマッピング ルールは SOAP 1.2 にのみ適用する。
SOAP 1.2 エラー メッセージの <Node>
Tuxedo エラー バッファで固定の最上位 FLD_STRING フィールド (Node) としてマップされる。
Node string - -
このマッピング ルールは SOAP 1.2 にのみ適用する。
SOAP 1.2 エラー メッセージの <Role>
Tuxedo エラー バッファで固定の最上位 FLD_STRING フィールド (Role) としてマップされる。
Role string - -
このマッピング ルールは SOAP 1.2 にのみ適用する。
SOAP エラー メッセージの <detail>
Tuxedo エラー バッファで固定の最上位 FLD_FML32 フィールドとしてマップされる。
detail fml32 - -
このマッピング ルールは SOAP 1.1 および SOAP 1.2 の両方に適用する。
<wsdl:fault> で定義された各メッセージ部
Tuxedo FML32 バッファで「detail」フィールドのサブ フィールドとしてマップされる。フィールド型は XML データ型のメッセージ部の FML32 フィールド型と同等。(表 2-3 および表 2-9 を参照)
このマッピング ルールは SOAP 1.1 および SOAP 1.2 の両方に適用する。


  ページの先頭       前  次