プログラミング・ガイド

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

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

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

 


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

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

SALTは、非SOAPデータ型マッピング(XMLおよびJSONの両方でのHTTPを介したREST)もサポートします。これは、サービスがHTTP/RESTサービスとして公開されている場合に実行されます。詳細は、「RESTデータ・マッピング」を参照してください。

 


SALTのメッセージ変換の理解

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

着信メッセージ変換

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

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に示すように、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メッセージにも同じ最大長の制限を適用する必要があります。

注意: 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
  • bool
  • unsigned char
  • signed char
  • wchar_t* or wchar_t
  • unsigned int
  • unsigned long
  • long long
  • unsigned long long
  • long doubl
VIEW32では、すべてのVIEWフィールド型、mbstringおよび埋込みVIEW32型がサポートされている。
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 (続き)
 
  • boolはxsd:Booleanに対応する
  • unsigned charはxsd:unsignedByteに対応する
  • signed charはxsd:byteに対応する
  • wchar_t* or wchar_t arrayはxsd:stringに対応する
  • unsigned intはxsd:unsignedIntに対応する
  • unsigned longはxsd:unsignedLongに対応する
  • long longはxsd:longに対応する
  • unsigned long longはxsd:unsignedLongに対応する
  • long doubleはxsd:doubleに対応する。Cインポータ・オプション・サイズの値long doubleを128ビットに設定しないでください。このオプションが正常にインポートされません。デフォルトの64ビットを使用してください。
  • VIEW32はtuxtype:view <viewname>に対応する
詳細は、「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フィールド定義のcount属性およびrequiredcount属性によって決まる。
フィールドの型とそれに対応する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” />
警告: SALTでは、日本語文字の「―」(EUC-JP 0xa1bd、Shift-JIS 0x815c)はUTF-16 0x2015に変換されます。
警告: 別の文字セット変換エンジンを使用する場合には、この文字に対するEUC-JPまたはShift-JISのマルチバイト出力は異なることがあります。たとえば、Java il8n文字変換エンジンではこの記号がUTF-16 0x2014に変換されます。この結果は、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添付ファイル・バインディングをサポートしません。

カスタム型付きバッファ

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

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

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

 


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

SALTでは、各wsdl:messageがOracle Tuxedo FML32バッファ構造としてマップされます。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_UCHAR
unsigned char
 
xsd:boolean
FLD_BOOL
char/bool
値のパターン
[ \T' | \F' ]
xsd:short
FLD_SHORT
short
 
xsd:unsignedShort
FLD_USHORT
unsigned short
 
xsd:int
FLD_LONG
long
 
xsd:unsignedInt
FLD_UINT
unsigned int
 
xsd:long
FLD_LONG
long
32ビット・スコープのOracle Tuxedoプログラムでは、Cプリミティブ型であるlongxsd:longのすべての有効な値を表現できません。
xsd:long
FLD_LLONG
long long
32ビットOracle Tuxedoプログラムでは、Cプリミティブ型であるlong longは、xsd:longのすべての有効な値を表現できます。
xsd:unsignedLong
FLD_LONG
unsigned long
32ビット・スコープのOracle Tuxedoプログラムでは、Cプリミティブ型であるunsigned longxsd:longのすべての有効な値を表現できません。
xsd:unsignedLong
FLD_ULONG
unsigned long long
32ビットOracle Tuxedoプログラムでは、Cプリミティブ型であるunsigned long longは、xsd:unsignedのすべての有効な値を表現できます。
xsd:float
FLD_FLOAT
float
 
xsd:double
FLD_DOUBLE
double
 
xsd:string
(およびxsd:stringから派生されたすべての組込み型(xsd:tokenxsd:Nameなど))
FLD_STRING
FLD_MBSTRING
char [ ]
wchar_t []
(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-7に、サポート対象のXMLスキーマのユーザー定義単純なデータ型および対応するOracle Tuxedo FML32のフィールド・データ型の一覧を示します。

表2-7 サポート対象の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バッファ内に追加するだけ十分です。
<xsd:complexType>とサブ要素は、順番に従ってコンポジット化されます。complexTypeには属性と要素を含めることができます。
FLD_FML32
FBFR32 *埋め込みfml32バッファ
複合型の各サブ要素は埋め込みFML32フィールドとして定義される。

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

注意: 表2-10に示すように、外部Webサービスの呼出しにおいて、属性は"<xs:attribute name="[name]" type="[type]"/>"の形式を使用した場合にのみサポートされます。"fixed="などの修飾子は現在サポートされていません。

表2-10 外部サービス・スキーマ属性の使用例
XMLスキーマ定義
 
<xs:element name="add">
   <xs:complexType>
     <xs:sequence>
        <xs:element name="param0" nillable="true" type="xs:int"/>
        <xs:element name="param1" nillable="true" type="xs:int"/>
     </xs:sequence>
     <xs:attribute name="aType" type="xs:string"/>
  </xs:complexType>
</xs:element>
対応するFML32フィールド定義
 
#name   rel-number      type    flags   comment
#----   ---------- ---- ------  -------
add     1       fml32   -       fullname=add, schema=axis2:add
aType   3       string  -       fullname=aType, schema=xs:string
param0  4       long    -       fullname=param0, schema=xs:int
param1  5       long    -       fullname=param1, schema=xs:int
対応するSALTメタデータ・リポジトリ定義
 
servicemode=webservice
inbuf=FML32
outbuf=FML32
errbuf=FML32
        param=add
        access=in
        paramschema=XSD_E:add@http://calc.sample
        type=fml32
        (
                param=param0
                access=in
                paramschema=XSD_E:param0@http://calc.sample
                type=long
                primetype=int
                param=param1
                access=in
                paramschema=XSD_E:param1@http://calc.sample
                type=long
                primetype=int
                param=aType
                access=in
                paramschema=XSD_E:attribute:aType@http://calc.sample
                type=string
                primetype=string
        )
対応するサンプル疑似コード
 
        FBFR32 *f, *fin;
        long len;
        FLDLEN32 len2;
        long inputnum1, inputnum2;
        char ret_val[25];
        char ret_attr[25];
        char *programName;
        int counter;
...
        char addType[25];
        strcpy(addType,argv[1]);
        Fadd32(fin, aType, addType, 0);
        inputnum1 = atoi(argv[2]);
        Fadd32(fin, param0, (char *)&inputnum1, 0);
        inputnum1 = atoi(argv[2]);
        Fadd32(fin, param0, (char *)&inputnum1, 0);
        Fadd32(f, add, (char *)fin, 0)
        tpcall("add", (char *)f, 0, (char **)&f, &len, TPSIGRSTRT)

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

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

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

表2-11 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-7を参照)
 
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-7を参照)
このマッピング・ルールはSOAP 1.1およびSOAP 1.2の両方に適用する。

 


RESTデータ・マッピング

着信メッセージ変換

問合せ文字列のマッピング

GETおよびDELETEメソッドの場合、入力データはHTTP問合せ文字列として渡されます。

問合せ文字列として渡されたデータは、次のような問合せ文字列表示の制約に従ってマップされます。

Tuxedoでサポートされる様々なタイプのバッファのマッピングは、次の説明のようになります。

表2-12 問合せ文字列のマッピング
Tuxedoのバッファ・タイプ
問合せ文字列のマッピング
注意
STRING
http://host:port/service?data
そのままのデータ、URLがエンコードされている場合はGWWSがデコードを行います。
CARRAY
http://host:port/service?data
base64エンコードされた文字列として表されるデータ。
MBSTRING
http://host:port/service?data
Tuxedo MBSTRINGのUTF-8表現でエンコードされたURLとして表されるデータ
XML
http://host:port/service?data
XMLフラグメントはそのまま、URLはエンコードされます。
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
http://host:port/service?value1&value2またはhttp://host:port/service?fieldname1=value1&fieldname2=value2
実際の値は、URLエンコードされた文字列表現からそれらのネイティブ・タイプに変換されます。
GWWSは、ターゲット・タイプに応じて、値を対応するVIEW/VIEW32メンバーに変換しようとします(文字列表現からTuxedo表現の数値)。
floatおよびdoubleのVIEW/VIEW32タイプの浮動表記
intの整数表記、longおよびその他の整数ベースのタイプ
FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその他のすべての文字の'%xx'表現)。
次のものには、フィールド名=値の表記を使用します。
ビュー記述で構成されている場合は、FBNAMEフィールド名。
ビュー記述にFBNAMEがない場合のCNAME値。
FBNAMEとCNAMEのどちらもこのサブタイプと一致しない場合は、マッピング・エラーが返されます。
FML/FML32
http://host:port/service?fieldname1=value1&fieldname2=value2
または、複数オカレンスの場合:
http://host:port/service?fieldname1=value1&fieldname1=value2
実際の値は、URLエンコードされた文字列表現からそれらのネイティブ・タイプに変換されます。
GWWSは、ターゲット・タイプに応じて、値を対応するVIEWFML/VIEWFML32メンバーに変換しようとします(文字列表現からTuxedo表現の数値)。
"floatおよびdoubleのVIEWFML/VIEWFML32タイプの浮動表記
"intの整数表記、longおよびその他の整数ベースのタイプ
"FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその'%xx'表現)。
"その他のすべての文字列

JSONデータ・マッピング

様々なTuxedoバッファ・タイプとJSONとの間の変換は、次のように行われます。

表2-13 JSONデータ・マッピング
Tuxedoのバッファ・タイプ
JSON同等/例
注意
STRING
<buffer content>
 
CARRAY
<binary buffer content>
 
MBSTRING
<Multi-byte string>
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
XML
<XML fragment as-is>
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
JSONには次のプリミティブ型があります。
"boolean (true/false)
"Number (intまたはdouble float)
"String
VIEW/VIEW32フィールド・タイプは次のようにマップされます(Tuxedoタイプ: JSONタイプ)。
フィールド名マッピングの詳細は、VIEW/VIEW32の考慮事項と例を参照してください。
一部のタイプは、プリミティブ型(long long、long double)で表現される場合は切り捨てられます。その場合、それらはJSON文字列としてレンダリングされます。
 
"short: Number
"int: Number
"long: Number
"float: Number
"double: Number
"char: String
"string: String
"carray: String (base64エンコード)
"bool: boolean
"unsigned char: String
"signed char: String
"wchar_t* or wchar_t: String
"unsigned int: Number
"unsigned long: Number
"long long: String (注意を参照)
"unsigned long long: String (注意を参照)
"long double: String (注意を参照)
"mbstring: String
"view32: ネストされたJSONレコード
 
FML/FML32
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能、FML32のみ
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
FML/FML32フィールド・タイプは次のようにマップされます(Tuxedoタイプ: JSONタイプ)。
"FLD_SHORT: Number
"FLD_LONG: Number
"FLD_FLOAT: Number
"FLD_DOUBLE: Number
"FLD_CHAR: StringまたはJSON trueの文字'T'またはJSON falseの'F'
"FLD_STRING: String
"FLD_CARRRAY: String (base64エンコード)
"FLD_MBSTRING: String
"FLD_VIEW32: JSONネスト・レコード、個々のタイプについては、VIEW/VIEW32マッピングを参照
"FLD_FML32: JSONオブジェクト
ネストFLD_VIEW32: ビュー・サブタイプの名前は組込みVIEW32の名前である必要があります。例:
VIEW32 example.v定義ファイル:
VIEW v32example
char flag1 - 1 - - -
string str - 1 100 - -
JSONコンテンツ(EVIEW32はFLD_VIEW32 fml32タイプです):
{"EVIEW32" :
{"v32example":
{"flag1":"x",
"str":"somestring"}
}
}

注意: 非構造化バッファ・タイプ(STRING、CARRAY、X_OCTET、MBSTRING)はデータをJSONオブジェクトとしてラップしません。データはそのまま転送されます。
注意: JSONでは、すべての浮動小数点型はXMLとは異なり内部的に処理されます。XMLでの浮動小数点の変換では、JSONの類似の変換に比べて精度が多少失われます。これは現時点での制約です。
VIEW/VIEW32に関する考慮事項

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

FML/FML32に関する考慮事項

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

FML32フィールド型FLD_PTRはサポートされていません。

XMLデータ・マッピング

XMLデータ・マッピングは、SOAPモードで使用されるマッピングと類似のルールを使用して実行されます。

次の点が異なります。

様々なTuxedoバッファ・タイプとXMLとの間の変換は、次のように行われます。

表2-14 XMLデータ・マッピング
Tuxedoのバッファ・タイプ
説明
REST XMLマッピングの例
STRING
Oracle Tuxedo STRING型付きバッファは、NULL文字で終端された文字列を格納する場合に使用します。Oracle Tuxedo STRING型付きバッファは自己記述型バッファです。
HELLO WORLD!
CARRAY
Oracle Tuxedo CARRAY型付きバッファには文字配列が格納されます(配列内には任意の位置にNULLを含んでよい)。CARRAYバッファはデータをオペークなものとして扱うバッファで、自己記述型ではない。
バイナリ・コンテンツ
MBSTRING
Oracle Tuxedo MBSTRING型付きバッファは、マルチバイト文字配列のために使用します。Oracle Tuxedo MBSTRINGバッファは次の3つの要素により構成されます。
- コードセット文字エンコーディング
- データ長
- 指定したエンコーディングによる文字配列
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
Content-Type設定に基づいてエンコードされたマルチバイト文字列。
XML
Oracle Tuxedo XML型付きバッファにはXMLドキュメントが格納されます。
GWWSサーバーでは、実際のXMLデータが整形式かどうかについてのみ検証が行われる。それ以外の事項(スキーマ検証など)の適用については確認されない。
ペイロードには、単一ルートのXMLバッファのみを格納できます。この点はGWWSサーバーによりチェックされます。
元のXMLドキュメントに含まれるプロローグ情報は、ペイロードに含めて伝送することはできません。
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
そのままのXMLフラグメント
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
Oracle Tuxedo VIEWおよびVIEW32型付きバッファには、Oracle Tuxedoアプリケーションで定義されたC構造が格納されます。
VIEW構造は、VIEW定義ファイルを使用して定義される。VIEWバッファ・タイプは複数のフィールドを定義できます。
VIEWでは次のフィールド型がサポートされている。
short
int
long
float
double
char
string
carray (base64でエンコードされたコンテンツとして表現)
bool
unsigned char
signed char
wchar_t* or wchar_t
unsigned int
unsigned long
long long
unsigned long long
long double
VIEW32では、すべてのVIEWフィールド型、mbstringおよび埋込みVIEW32型がサポートされている。
サブ要素の名前はVIEWフィールド名と同じ。サブ要素の出現回数は、VIEWフィールド定義のcount属性によって決まる。サブ要素の値は、XMLスキーマの型に対応するVIEWフィールド・データ型で表する必要がある。
<VIEW>
  <viewfieldname>
    fieldcontent
  </viewfieldname>
</VIEW>
FML/FML32
Oracle Tuxedo FMLおよびFML32タイプ・バッファは、Oracle Tuxedoシステムに特有の自己記述型バッファです。データ・フィールドごとに個別の識別子、出現回数、および場合により長さのインジケータを保持します。
FMLでは次のフィールド型がサポートされている。
- FLD_CHAR
- FLD_SHORT
- FLD_LONG
- FLD_FLOAT
- FLD_DOUBLE
- FLD_STRING
- FLD_CARRAY (base64エンコードされたコンテンツとして)
FML32では、すべてのFMLフィールド型とFLD_PTR、FLD_MBSTRING、FLD_FML32、FLD_VIEW32がサポートされている。
ネストFLD_VIEW32: ビュー・サブタイプの名前は組込みVIEW32の名前である必要があります。例:
VIEW32 example.v定義ファイル:
VIEW v32example
char flag1 - 1 - - -
string str - 1 100 - -
XMLコンテンツ(EVIEW32はFLD_VIEW32 fml32タイプです):
<EVIEW32>
<v32example>
<flag1>x</flag1>
<str>somestring</str>
</v32example>
</EVIEW32>

注意: 非構造化バッファ・タイプ(STRING、CARRAY、X_OCTET、MBSTRING)はデータをXMLオブジェクトとしてラップしません。データはそのまま転送されます。
VIEW/VIEW32に関する考慮事項:

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

FML/FML32に関する考慮事項

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

発信メッセージ変換

問合せ文字列のマッピング

注意: このモードでは、組込みFML32およびVIEW32フィールドを使用しようとすると、TPEPROTOエラーが発生します。

GETおよびDELETEメソッドの場合、リクエスト・データはHTTP問合せ文字列として渡されます。例: http://host:1234/banking?account=1234

問合せ文字列として渡されたデータは、次のような問合せ文字列表示の制約に従ってマップされます。

Tuxedoでサポートされる様々なタイプのバッファのマッピングは、次の説明のようになります。

表2-15 問合せ文字列のマッピング
Tuxedoのバッファ・タイプ
問合せ文字列のマッピング
注意
STRING
http://host:port/path?data
そのままのデータ、URLがエンコードされている場合はGWWSがエンコードを行います。
CARRAY
http://host:port/path?data
base64エンコードされた文字列として表されるデータ。
MBSTRING
http://host:port/path?data
Tuxedo MBSTRINGのUTF-8表現でエンコードされたURLとして表されるデータ
XML
http://host:port/path?data
XMLフラグメントはそのまま、URLはエンコードされます。
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
http://host:port/path?value1&value2 or http://host:port/service?fieldname1=value1&fieldname2=value2
GWWSは、ターゲット・タイプに応じて、値を対応するVIEW/VIEW32メンバーに変換しようとします(文字列表現からTuxedo表現の数値)。
  • "floatおよびdoubleのVIEW/VIEW32タイプの浮動表記
  • "intの整数表記、longおよびその他の整数ベースのタイプ
  • "FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその'%xx'表現)。
  • "その他のすべての文字列
次のものには、フィールド名=値の表記を使用します。
  • "ビュー記述で構成されている場合は、FBNAMEフィールド名。
  • "ビュー記述にFBNAMEがない場合のCNAME値。
  • "FBNAMEとCNAMEのどちらもこのサブタイプと一致しない場合は、マッピング・エラーが返されます。
FML/FML32
http://host:port/path?fieldname1=value1&fieldname2=value2
または、複数オカレンスの場合:
http://host:port/service?fieldname1=value1&fieldname1=value2
実際の値は、URLエンコードされた文字列表現からそれらのネイティブ・タイプに変換されます。
GWWSは、ターゲット・タイプに応じて、値を対応するFML/FML32メンバーに変換しようとします(文字列表現からTuxedo表現の数値)。
  • "floatおよびdoubleのFML/FML32タイプの浮動表記
  • "intの整数表記、longおよびその他の整数ベースのタイプ
  • "FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその'%xx'表現)。
  • "その他のすべての文字列

JSONデータ・マッピング

様々なTuxedoバッファ・タイプとJSONとの間の変換は、次のように行われます。

表2-16 JSONデータ・マッピング
Tuxedoのバッファ・タイプ
JSON同等/例
注意
STRING
<buffer content>
 
CARRAY
<binary buffer content>
 
MBSTRING
<Multi-byte string>
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
XML
<XML fragment as-is>
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能:
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
JSONには次のプリミティブ型があります。
"boolean (true/false)
"Number (intまたはdouble float)
"String
VIEW/VIEW32フィールド・タイプは次のようにマップされます(Tuxedoタイプ: JSONタイプ)。
"short: Number
"int: Number
"long: Number
"float: Number
"double: Number
"char: String
"string: String
"carray: String (base64エンコード)
"bool: boolean
"unsigned char: String
"signed char: String
"wchar_t* or wchar_t: String
"unsigned int: Number
"unsigned long: Number
 
 
"long double: String (注意を参照)
"mbstring: String
"view32: ネストされたJSONレコード
フィールド名マッピングの詳細は、VIEW/VIEW32の考慮事項と例を参照してください。
一部のタイプは、プリミティブ型(long long、long double)で表現される場合は切り捨てられます。その場合、それらはJSON文字列としてレンダリングされます。
FML/FML32
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能、FML32のみ
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
FML/FML32フィールド・タイプは次のようにマップされます(Tuxedoタイプ: JSONタイプ)。
"FLD_SHORT: Number
"FLD_LONG: Number
"FLD_FLOAT: Number
"FLD_DOUBLE: Number
"FLD_CHAR: StringまたはJSON trueの文字'T'またはJSON falseの'F'
"FLD_CARRRAY: String (base64エンコード)
"FLD_MBSTRING: String
"FLD_VIEW32: JSONネスト・レコード、個々のタイプについては、VIEW/VIEW32マッピングを参照
"FLD_FML32: JSONオブジェクト
ネストFLD_VIEW32: ビュー・サブタイプの名前は組込みVIEW32の名前である必要があります。例:
VIEW32 example.v定義ファイル:
VIEW v32example
charflag1 - 1 ---
string str - 1 100
- -
JSONコンテンツ(EVIEW32はFLD_VIEW32 fml32タイプです):
{"EVIEW32" :
 {"v32example":
{"flag1":"x",
"str":"somestring"}
}
}

注意: 非構造化バッファ・タイプ(STRING、CARRAY、X_OCTET、MBSTRING)はデータをJSONオブジェクトとしてラップしません。データはそのまま転送されます。データのマッピングに関するバッファ・タイプのcontent-type設定は無視されます。
注意: JSONでは、すべての浮動小数点型はXMLとは異なり内部的に処理されます。XMLでの浮動小数点の変換では、JSONの類似の変換に比べて精度が多少失われます。これは現時点での制約です。
VIEW/VIEW32に関する考慮事項:

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

FML/FML32に関する考慮事項

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

FML32フィールド型FLD_PTRはサポートされていません。

変換の例:

VIEW32

リスト2-16 ビュー記述ファイル
VIEW empname
#TYPE          CNAME  FBNAME    COUNT FLAG SIZE NULL
char           fname  EMP_FNAME     1    -   25    -
char	         minit  EMP_MINIT     1    -    1    -
char           lname  EMP LNAME     1    -   25    -
END
VIEW emp
struct         empname ename        1    -    -    -
unsignedlong   id     EMP_ID        1    -    -    -
long           ssn    EMP_SSN       1    -    -    -
double         salaryhist EMP_SAL  10    -    -    -
END

コンパイル後の対応するヘッダー・ファイル

リスト2-17
struct empname {
  char fname[25];
  char minit;
  char lname[25];
};
struct emp {
  struct empname ename;
  unsigned long id;
  long ssn;
  double salaryhist[10];
}

JSONコンテンツの例

リスト2-18
{
    "ename":
        {
            "EMP_FNAME":"John",
            "EMP_MINIT":"R",
            "EMP_LNAME":"Smith"
        },
    "EMP_ID":1234,
    "EMP_SSN":123456789,
    "EMP_SAL":
        [10000.0,
         11000.0,
         12000.0,
         13000.0,
         14000.0,
         15000.0,
         16000.0,
         17000.0,
         18000.0,
         19000.0]
    }
}

ビュー・ファイルにFBNAME名が指定されない場合、コンテンツはCNAME値を使用して表現されます。フィールド名もまたネストされたビューのサブタイプ名であるため、フィールド名なしにネストを記述することはできません。1レベルの構造のみを表現できます。

例:

リスト2-19 ビュー記述
VIEW empname
#TYPE          CNAME  FBNAME    COUNT FLAG SIZE NULL
char           fname  -             1    -   25    -
char	         minit  -             1    -    1    -
char           lname  -             1    -   25    -
END

コンパイル後の対応するヘッダー・ファイル

リスト2-20 コンパイル
struct empname {
  char fname[25];
  char minit;
  char lname[25];
};
リスト2-21 JSONコンテンツの例
{
    "fname":"John",
    "minit":"R",
    "lname":"Smith"
        }
FML32
リスト2-22 フィールド表
#name		rel-number	type	flags	comment
BIKES		1	fml32	-	
COLOR		2	string	-	
CURSERIALNO	3	string	-	
INSTOCK	4	string	-	
NAME		5	string	-	
ORDERDATE	6	string	-	
PRICE		7	float	-	
SERIALNO	8	string	-	
SIZE		9	long	-	
SKU		10	string	-	
TYPE		11	string	-
リスト2-23 JSONコンテンツの例
    "BIKES":
        [	
            {"COLOR":"BLUE",
             "CURSERIALNO":"AZ123",
             "INSTOCK":"Y",
             "NAME":"CUTTER",
             "ORDERDATE":"11/03/2012",   
             "PRICE":1234.55,
             "SERIALNO":"123456",
             "SIZE":52,
             "SKU":"CU521234",
             "TYPE":"ROAD"},
            {"COLOR":"RED",
             "CURSERIALNO":"BZ123",
             "INSTOCK":"Y",
             "NAME":"ROCKGLIDER",
             "ORDERDATE":"11/06/2012",   
             "PRICE":1455.55,
             "SERIALNO":"123457",
             "SIZE":16,
             "SKU":"RG161234",
             "TYPE":"MTB"},
        ]
    }
}

XMLデータ・マッピング

XMLデータ・マッピングは、SOAPモードで使用されるマッピングと類似のルールを使用して実行されます。

次の点が異なります。

様々なTuxedoバッファ・タイプとXMLとの間の変換は、次のように行われます。

表2-17 XMLデータ・マッピング
Tuxedoのバッファ・タイプ
説明
HTTP XMLマッピングの例
STRING
Oracle Tuxedo STRING型付きバッファは、NULL文字で終端された文字列を格納する場合に使用します。Oracle Tuxedo STRING型付きバッファは自己記述型バッファです。
HELLO WORLD!
CARRAY
Oracle Tuxedo CARRAY型付きバッファには文字配列が格納されます(配列内には任意の位置にNULLを含んでよい)。CARRAYバッファはデータをオペークなものとして扱うバッファで、自己記述型ではない。
バイナリ・コンテンツ
MBSTRING
Oracle Tuxedo MBSTRING型付きバッファは、マルチバイト文字配列のために使用します。Oracle Tuxedo MBSTRINGバッファは次の3つの要素により構成されます。
- コードセット文字エンコーディング
- データ長
- 指定したエンコーディングによる文字配列
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
Content-Type設定に基づいてエンコードされたマルチバイト文字列。
XML
Oracle Tuxedo XML型付きバッファにはXMLドキュメントが格納されます。
GWWSサーバーでは、実際のXMLデータが整形式かどうかについてのみ検証が行われる。それ以外の事項(スキーマ検証など)の適用については確認されない。
ペイロードには、単一ルートのXMLバッファのみを格納できます。この点はGWWSサーバーによりチェックされます。
元のXMLドキュメントに含まれるプロローグ情報は、ペイロードに含めて伝送することはできません。
UTF-8以外のエンコーディングを転送するには、SALTDEPLOY構成の"enableMultiEncoding"プロパティを"true"に設定する必要があります。
そのままのXMLフラグメント
X_C_TYPE
VIEW/VIEW32と同じ
 
X_COMMON
VIEW/VIEW32と同じ
 
X_OCTET
CARRAYと同じ
 
VIEW/VIEW32
Oracle Tuxedo VIEWおよびVIEW32型付きバッファには、Oracle Tuxedoアプリケーションで定義されたC構造が格納されます。
VIEW構造は、VIEW定義ファイルを使用して定義される。VIEWバッファ・タイプは複数のフィールドを定義できます。
VIEWでは次のフィールド型がサポートされている。
short
int
long
float
double
char
string
carray (base64でエンコードされたコンテンツとして表現)
bool
unsigned char
signed char
wchar_t* or wchar_t
unsigned int
unsigned long
long long
unsigned long long
long double
<VIEW>
<viewfieldname>
fieldcontent
</viewfieldname>
</VIEW>
 
VIEW32では、すべてのVIEWフィールド型、mbstringおよび埋込みVIEW32型がサポートされている。
サブ要素の名前はVIEWフィールド名と同じ。サブ要素の出現回数は、VIEWフィールド定義のcount属性によって決まる。サブ要素の値は、XMLスキーマの型に対応するVIEWフィールド・データ型で表する必要がある。
 
FML/FML32
Oracle Tuxedo FMLおよびFML32タイプ・バッファは、Oracle Tuxedoシステムに特有の自己記述型バッファです。データ・フィールドごとに個別の識別子、出現回数、および場合により長さのインジケータを保持します。
FMLでは次のフィールド型がサポートされている。
- FLD_CHAR
- FLD_SHORT
- FLD_LONG
- FLD_FLOAT
- FLD_DOUBLE
- FLD_STRING
- FLD_CARRAY (base64エンコードされたコンテンツとして)
FML32では、すべてのFMLフィールド型とFLD_PTR、FLD_MBSTRING、FLD_FML32、FLD_VIEW32がサポートされている。
ネストFLD_VIEW32: ビュー・サブタイプの名前は組込みVIEW32の名前である必要があります。例:
VIEW32 example.v定義ファイル:
VIEW v32example
char flag1 - 1 ---
string str - 1 - 100
XMLコンテンツ(EVIEW32はFLD_VIEW32 fml32タイプです):
<EVIEW32>
<v32example>
<flag1>x</flag1>
<str>somestring</str>
</v32example>
</EVIEW32>

注意: 非構造化バッファ・タイプ(STRING、CARRAY、X_OCTET、MBSTRING)はデータをXMLオブジェクトとしてラップしません。データはそのまま転送されます。
VIEW/VIEW32に関する考慮事項:

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

FML/FML32に関する考慮事項

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


  先頭に戻る       前  次