プログラミング・ガイド

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

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

この項の内容は次のとおりです。

 


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

Oracle SALTでは、WSDLメッセージとOracle Tuxedo型付きバッファとの間における双方向のデータ型のマッピングをサポートしています。サービス呼出しのたびに、GWWSサーバーは、Oracle Tuxedo型付きバッファとSOAPメッセージ・ペイロード間の各メッセージを変換します。SOAPメッセージ・ペイロードは<soap:body>要素にカプセル化されたXMLデータです。詳細は、「Oracle SALTのメッセージ変換について」を参照してください。

ネイティブOracle Tuxedoサービスについては、Oracle Tuxedoの各バッファ型は、SALTで生成されるWSDLドキュメント内ではXMLスキーマを使用して記述されます。Oracle Tuxedoサービスのリクエスト/レスポンス・バッファが通常のXML形式で表現されます。詳細は、「Oracle Tuxedoサービス用Tuxedo-to-XMLデータ型のマッピング」を参照してください。

外部Webサービスについては、各WSDLメッセージがOracle Tuxedo FML32バッファ構造としてマップされます。Oracle Tuxedoアプリケーションは、FML32バッファを入力/出力として使用してSALTプロキシ・サービスを起動します。詳細は、「外部Webサービス用XML-to-Tuxedoデータ型のマッピング」を参照してください。

 


Oracle SALTのメッセージ変換について

Oracle SALTメッセージ変換はSOAP XMLデータとOracle Tuxedoタイプ・バッファとの間におけるメッセージの変換プロセスです。Oracle SALTでは、着信メッセージ変換および発信メッセージ変換という2つのメッセージ変換ルールを紹介しています。

着信メッセージ変換

着信メッセージ変換プロセスは、「Tuxedo-to-XMLデータ型マッピング・ルール」に準拠するSOAP XMLペイロードとOracle Tuxedoタイプ・バッファの変換プロセスです。着信メッセージ変換プロセスは次の2つの場合に行われます。

Oracle SALTでは、SOAPメッセージ内の<inbuf><outbuf>および/または<errbuf>要素にOracle Tuxedoバッファ・コンテンツが囲まれています。<inbuf><outbuf>および/または<errbuf>要素に囲まれているコンテンツを「着信XMLペイロード」と呼びます。

発信メッセージ変換

発信メッセージ変換プロセスは、「Tuxedo-to-XMLデータ型マッピング・ルール」に準拠するSOAP XMLペイロードとOracle Tuxedoタイプ・バッファの変換プロセスです。発信メッセージ変換プロセスは次の2つの場合に行われます。

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

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

 


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

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

表2-2 Oracle TuxedoバッファのXMLスキーマへのマッピング
Oracle Tuxedoバッファ・タイプ
説明
SOAPメッセージのXMLスキーマ・マッピング
STRING
Oracle Tuxedo STRING型付きバッファは、NULL文字で終端された文字列を格納する場合に使用します。Oracle Tuxedo STRING型付きバッファは自己記述型バッファです。
xsd:string
SOAPメッセージ内では、実際の文字列データをカプセル化するXML要素を、xsd:stringを使用して直接に定義する必要があります。
注:
  • STRINGデータ型には、Oracle Tuxedoサービス・メタデータ・リポジトリにおいてデータの最大長を指定できます。これがOracle Tuxedoで定義されている場合、対応するSOAPメッセージにも同じ最大長の制限が適用されます。GWWSサーバーにより、実際のメッセージ・バイト長がOracle Tuxedoサービス・メタデータ・リポジトリの定義に対して検証されます。メッセージのバイト長がサポート可能な最大長を超える場合は、SOAPフォルトのメッセージが返されます。
  • GWWSサーバーが「UTF-8」以外のSOAPメッセージを受け取る場合は、対応する文字列値のエンコーディングは同じです。
CARRAY
(SOAP Message plus Attachmentsとのマッピング)
Oracle 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データ型にはバイトの最大長を指定できます。これがOracle Tuxedoで定義されている場合、対応するSOAPメッセージにはこの制限が適用されます。GWWSサーバーにより、実際のメッセージ・バイト長がOracle Tuxedoサービス・メタデータ・リポジトリの定義に対して検証されます。

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

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

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

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

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

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

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

注: Oracle SALTのWSDLジェネレータで生成されるWSDLドキュメントには、最大長を制限するxsd:maxLengthの指定が含まれません。ただし、GWWSサーバーにより、バイト長がOracle 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
Oracle Tuxedo VIEWおよびVIEW32型付きバッファには、Oracle 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 (Oracle Tuxedoサービス・メタデータ・リポジトリ定義におけるbyte)は xsd:byteに対応する
  • char (Oracle Tuxedoサービス・メタデータ・リポジトリにおけるchar)はxsd:string (maxlength=1の制限付き)に対応する
  • stringxsd:stringに対応する
  • carrayxsd:base64Binaryに対応する
  • mbstringxsd:stringに対応する
VIEW/VIEW32 (続き)
 
詳細は、「VIEW/VIEW32に関する考慮事項」を参照してください。
FML/FML32
Oracle Tuxedo FMLおよびFML32タイプ・バッファは、Oracle Tuxedoシステムに特有の自己記述型バッファです。データ・フィールドごとに個別の識別子、出現回数、および必要に応じて長さを示す情報を保持します。
FMLでは以下のフィールド型がサポートされています。
  • FLD_CHAR
  • FLD_SHORT
  • FLD_LONG
  • FLD_FLOAT
  • FLD_DOUBLE
  • FLD_STRING
  • FLD_CARRAY
FML32では、すべてのFMLフィールド型とFLD_PTRFLD_MBSTRINGFLD_FML32FLD_VIEW32がサポートされています。
FML/FML32バッファには、基本フィールド・データごとに、データ・ディクショナリに似た基本的な定義のみを指定できます。 異なる型名を持つFML/FML32バッファごとに、特定のFML/FML32バッファ定義を適用する必要があります。
FML/FML32の各フィールドは、そのFML/FML32バッファXMLスキーマ型における1つまたは複数のサブ要素に対応します。サブ要素の名前はFMLフィールド名です。サブ要素の出現回数は、FML/FML32フィールド定義のカウントおよび必須カウント属性によって決まります。
フィールドの型とそれに対応するXMLスキーマ型の一覧を以下に示します。
  • shortxsd:shortに対応する
  • intxsd:intに対応する
  • longxsd:longに対応する
  • floatxsd:floatに対応する
  • doublexsd:doubleに対応する
  • char (Oracle Tuxedoサービス・メタデータ・リポジトリ定義におけるbyte)はxsd:byteに対応する
  • char (Oracle 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に関する考慮事項」を参照してください。

Oracle Tuxedo STRING型付きバッファ

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

リスト2-1には、STRING型付きバッファを受け付けるTOUPPER Oracle 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” />

Oracle Tuxedo CARRAY型付きバッファ

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

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

リスト2-2に、base64Binaryマッピングを使用してCARRAY型付きバッファを受け付けるTOUPPER Oracle 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 Oracle 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>

Oracle Tuxedo MBSTRING型付きバッファ

Oracle Tuxedo MBSTRING型付きバッファは、マルチバイト文字配列のために使用します。Oracle Tuxedo MBSTRING型付きバッファは次の3つの要素により構成されます。

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

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

リスト2-4 MBSIRINGバッファのSOAPメッセージ
<?xml encoding=”UFT-8”?>
  <SOAP:body>
     <m:MBSERVICE xmlns:m=”http://......”>
         <inbuf>こんにちは</infuf>
     </m:MBSERVICE>

<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に日本語文字の「―」が含まれている場合、Oracle Tuxedoサーバー・サイドのMBSTRING自動変換機能で文字列をShift-JISまたはEUC-JPに戻すことはできません。

Oracle Tuxedo XML型付きバッファ

Oracle Tuxedo XML型付きバッファにはXMLドキュメントが格納されます。

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

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

リスト 2-5 株価情報のXMLドキュメント
<?xml version="1.0" encoding="UTF-8"?>
<!-- "Stock Quotes". -->
<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-6 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” />
注: デフォルトのネームスペースがOracle Tuxedo XML型付きバッファに格納されてGWWSサーバーに返されると、GWWSサーバーはデフォルトのネームスペースを正規の名前に変換します。これにより、各要素にはその名前の接頭辞が付加されます。
注: たとえば、デフォルトのネームスペースを持つリスト2-7のようなバッファがOracle TuxedoサービスからGWWSサーバーに返されると、GWWSサーバーは、リスト2-8のようにデフォルトのネームスペースを正規の名前に変換します。
リスト 2-7 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-8 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>

Oracle Tuxedo VIEW/VIEW32型付きバッファ

Oracle Tuxedo VIEWおよびVIEW32型付きバッファは、Oracle Tuxedoアプリケーションで定義されたC構造を格納する場合に使用します。VIEW構造はVIEW定義ファイルで定義する必要があります。VIEWバッファ・タイプは複数のフィールドを定義できます。

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

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

リスト 2-9 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-10 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-11に示します。

リスト 2-11 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に関する考慮事項

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

Oracle Tuxedo FML/FML32型付きバッファ

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

FMLデータ・マッピングの例

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

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

ACCOUNT_ID        1       long              /* 2 occurrences, The withdrawal account is 1st, and the deposit account is 2nd  */
AMOUNT 2 float /* The amount to transfer */

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

リスト 2-12 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-13に示します。

リスト 2-13 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-14には、FML32型付きバッファを受け付けるTRANSFER Oracle TuxedoサービスのSOAPメッセージの例を示します。

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

CUST_INFO            1       fml32         /* 2 occurrences, The withdrawal customer is 1st, and the deposit customer is 2nd  */ 
ACCOUNT_INFO 2 fml32 /* 2 occurrences, The withdrawal account is 1st, and the deposit account is 2nd */
AMOUNT 3 float /* The amount to transfer */

埋め込まれている各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-14 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-15に示します。

リスト 2-15 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に関する考慮事項

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

Oracle Tuxedo X_C_TYPE型付きバッファ

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

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

Oracle Tuxedo X_COMMON型付きバッファ

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

Oracle Tuxedo X_OCTET型付きバッファ

Oracle Tuxedo X_OCTET型付きバッファはCARRAYと同等です。

注: Oracle Tuxedo X_OCTET型付きバッファはxsd:base64Binaryタイプのみにマップできます。SALT 1.1は、Oracle Tuxedo X_OCTET型付きバッファに対するMIME添付ファイル・バインディングをサポートしません。

カスタム型付きバッファ

Oracle SALTには、カスタム型付きバッファをサポートするためのプラグイン・メカニズムがあります。 これにより、独自のXMLスキーマ定義に対するSOAPメッセージの検証、カスタム型付きバッファの割り当て、データの解析とバッファへの変換、およびその他の操作ができます。

XMLスキーマの組込み型であるxsd:anyType型がこれに対応し、SOAPメッセージに格納されたXMLドキュメントを表します。カスタム型付きバッファを使用する際は、実際のデータをXML形式で定義および表現し、それをWebサービスのクライアントとOracle Tuxedo Webサービス・スタックとの間で伝送するようにします。XML型付きバッファの場合と同様に、SOAP本文には単一ルートのXMLバッファのみ格納できます。この点は、整合性を保つためGWWSによりチェックされます。

プラグインの詳細は、「Oracle SALTプラグインの使用」を参照してください。

 


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

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

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

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

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

表2-3 サポート対象のXMLスキーマの組込み単純なデータ型
XMLスキーマの組込み
単純な型
Oracle Tuxedo FML32のフィールド・データ型
Oracle 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ビット・スコープのOracle Tuxedoプログラムでは、Cプリミティブ型であるlongxsd:longのすべての有効な値を表現できません。
xsd:unsignedLong
FLD_LONG
unsigned long
32ビット・スコープのOracle 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関連、あらゆるURI、QName、NOTATION)
FLD_STRING
char [ ]
対応するXML組込みデータ型の値パターンに準拠する必要があります。そうしないと、サーバー側のWebサービスはリクエストを受け付けません。

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

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

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

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

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

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

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

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

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


  先頭に戻る       前  次