目次 前 次 PDF


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

データ型のマッピングとメッセージ変換
この章では、次の項について説明します。
データ型のマッピングとメッセージ変換の概要
SALTでは、WSDLメッセージとOracle Tuxedo型付きバッファとの間における双方向のデータ型のマッピングをサポートしています。サービス呼出しのたびに、GWWSサーバーは、Oracle Tuxedo型付きバッファとSOAPメッセージ・ペイロード間の各メッセージを変換します。SOAPメッセージ・ペイロードは<soap:body>要素にカプセル化されたXMLデータです。詳細は、「?$paratext>?」を参照してください。
ネイティブOracle Tuxedoサービスについては、Oracle Tuxedoの各バッファ型は、SALTで生成されるWSDLドキュメント内ではXMLスキーマを使用して記述されます。Oracle Tuxedoサービスのリクエスト/レスポンス・バッファが通常のXML形式で表現されます。詳細は、「?$paratext>?」を参照してください。
外部Webサービスについては、各WSDLメッセージがOracle Tuxedo FML32バッファ構造としてマップされます。Oracle Tuxedoアプリケーションは、FML32バッファを入力/出力として使用してSALTプロキシ・サービスを呼び出します。詳細は、「?$paratext>?」を参照してください。
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つの場合に行われます。
GWWSがレガシーOracle Tuxedoサービス用のSOAPリクエストを受け付ける場合
GWWSがレガシーOracle Tuxedoサービスからレスポンスの型付きバッファを受け付ける場合
SALTでは、SOAPメッセージ内の<inbuf><outbuf>および/または<errbuf>要素にOracle Tuxedoバッファ・コンテンツが囲まれています。<inbuf><outbuf>および/または<errbuf>要素に囲まれているコンテンツを着信XMLペイロードと呼びます。
発信メッセージ変換
発信メッセージ変換プロセスは、Tuxedo-to-XMLデータ型マッピング・ルールに準拠するSOAP XMLペイロードとOracle Tuxedoタイプ・バッファの変換プロセスです。発信メッセージ変換は次の2つの場合に行われます。
GWWSがOracle Tuxedoアプリケーションから送られてくるリクエストの型付きバッファを受け付ける場合
GWWSが外部WebサービスからのSOAPレスポンス・メッセージを受け付ける場合
表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サービス・メタデータ・リポジトリの定義に対して検証されます。
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*または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.に対応するlong doubleのCインポータ・オプションのサイズを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フィールド定義のカウントおよび必須カウント属性によって異なります。
フィールドの型とそれに対応する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に関する考慮事項」を参照してください。
RECORD
RECORDバッファ・タイプは、コピーブック・レコードを表します。RECORD型には、個々のレコード構造体を示すサブタイプが必要です。
生成されるCOBOL型:
RECORD
COMP-1
COMP-2
S9(18)
9(18)
S9(9)
9(9)
S9(4)
S9(10)V9(10)
X(1024)
@binary=true
RECORDの各データ型は、XMLスキーマの複合型として定義されます。RECORDの各フィールドが、XMLスキーマの複合型における1つまたは複数のサブ要素に対応します。
COBOLの型とそれに対応するXMLスキーマ型の一覧を次に示します。
RECORDxsd:complexTypeに対応します。
COMP-1xsd:floatに対応します。
COMP-2xsd:doubleに対応します。
S9(18)xsd:longに対応します。
9(18)xsd:unsignedLongに対応します。
S9(9)xsd:intに対応します。
9(9)xsd:unsignedIntに対応します。
S9(4)xsd:shortに対応します。
S9(10)V9(10) COMP-3xsd:decimalに対応します。
X(1024)xsd:stringに対応します。
@binary=truexsd:base64Binaryに対応します。
X_C_TYPE
X_C_TYPEバッファ・タイプはVIEWバッファ・タイプと同等です。
「VIEW/VIEW32」を参照
X_COMMON
X_COMMONバッファ・タイプはVIEWバッファ・タイプと同等ですが、COBOLプログラムとCプログラムとの間で互換性を確保する場合に使用します。フィールドの型としてはshortlong、stringのみ使用します。
「VIEW/VIEW32」を参照
X_OCTET
X_OCTETバッファ型はCARRAYバッファ型と同等です。
CARRAY xsd:base64Binaryを参照
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のようになります。
リスト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との変換に関しては、次の点を考慮する必要があります。
XMLとVIEW/VIEW32との変換するための環境を用意する必要があります。これには、VIEWディレクトリおよびシステムVIEW定義ファイルの設定が含まれます。GWWSサーバーはこれらの定義を自動的にロードします。
GWWSサーバーでは、起動時にOracle Tuxedoサービス・メタデータ・リポジトリのVIEW/VIEW32パラメータ定義とVIEW/VIEW32定義ファイルとの整合性の厳格なチェックが提供されます。
不整合な点が見つかった場合、GWWSサーバーは起動できません。不整合に関するメッセージがULOGファイルに出力されます。
tmwsdlgenも同じように、起動時にOracle Tuxedoサービス・メタデータ・リポジトリのVIEW/VIEW32パラメータ定義とVIEW/VIEW32定義ファイルとの整合性の厳格なチェックを提供します。不整合な点が見つかった場合、GWWSサーバーは起動できません。不整合に関するメッセージがULOGファイルに出力されます。
VIEW定義ファイルをロードできない場合、tmwsdlgenはOracle Tuxedoサービス・メタデータ・リポジトリの定義を使用してWSDLドキュメントの作成を試みます。
dec_tはサポートされていないため、dec_t型のVIEWフィールドを定義する場合、サービスをWebサービスとしてエクスポートできず、SALT構成ファイルのロード中にエラー・メッセージが生成されます。
Oracle Tuxedoサービス・メタデータ・リポジトリは、string/ mbstring型のパラメータのサイズ属性(Oracle Tuxedo型付きバッファ内で許容される最大バイト長を指定する)を定義する場合がありますが、この制限値の指定はSALTによって生成されるWSDLドキュメントには公開されません。
VIEW32に埋め込まれたMBStringバッファがリクエストされてGWWSサーバーに返された場合、GWWSは必要なMBStringの長さを正しく計算できず、入力文字列がVIEW32の最大長を超えたと報告します。この問題は、転送エンコーディング情報内にヘッダーが含まれているために発生します。VIEW32のフィールド長を定義する際には、ヘッダーのサイズを含めることが必要です。
Oracle Tuxedoの基本データ型であるlongのサイズは、プラットフォームによって32ビット・スコープの場合と64ビット・スコープの場合があり一定ではありません。しかし、この型に対応するxsd:longスキーマ型で64ビットの数値を表現できます。
GWWSサーバーが32ビット・モードで動作している場合、Webサービスのクライアントから32ビットの範囲を超えた値を持つxsd:long型データが送信されると、SOAPフォルトが発生することがあります。
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に示します。
リスト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に示します。
リスト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との変換に関しては、次の点を考慮する必要があります。
XMLとFML/FML32を相互に変換するための環境を用意する必要があります。これには、FMLフィールド表ファイルのディレクトリおよびシステムFMLフィールド定義ファイルの設定が含まれます。GWWSはこれらの定義を自動的にロードします。FML型付きバッファは、環境が正しく設定されている場合に限って処理できます。
FML32フィールド型FLD_PTRはサポートされていません。
GWWSサーバーでは、起動時にOracle Tuxedoサービス・メタデータ・リポジトリのFML/FML32パラメータ定義とFML/FML32定義ファイルとの整合性の厳格なチェックが提供されます。
環境設定に準拠していないFML/32フィールドが見付かった場合、またはフィールド表のフィールド・データ型定義がOracle Tuxedoサービス・メタデータ・リポジトリのパラメータ・データ型定義と異なる場合、GWWSは起動できません。不整合に関するメッセージがULOGファイルに出力されます。
tmwsdlgenコマンドによって、Oracle Tuxedoサービス・メタデータ・リポジトリのFML/FML32パラメータ定義とFML/FML32定義ファイルとの整合性がチェックされます。不整合な点が見つかった場合、警告のみが表示され、不整合が許容されます。
環境設定に準拠していないFML/32フィールドが見付かった場合、またはフィールド表のフィールド・データ型定義がOracle Tuxedoサービス・メタデータ・リポジトリのパラメータ・データ型定義と異なる場合、tmwsdlgenはOracle Tuxedoサービス・メタデータ・リポジトリの定義を使用してWSDLドキュメントの作成を試みます。
Oracle Tuxedoサービス・メタデータ・リポジトリは、string/ mbstring型のパラメータのサイズ属性(Oracle Tuxedo型付きバッファ内で許容される最大バイト長を指定する)を定義する場合がありますが、この制限値の指定はSALTによって生成されるWSDLドキュメントには公開されません。
Oracle Tuxedoの基本データ型であるlongのサイズは、プラットフォームによって32ビット・スコープの場合と64ビット・スコープの場合があり一定ではありません。しかし、この型に対応するxsd:longスキーマ型で64ビットの数値を表現できます。次のシナリオではSOAPフォルトが生成されます。
GWWSサーバーが32ビット・モードで動作している場合、Webサービスのクライアントから32ビットの範囲を超えた値を持つxsd:long型データが送信されます。
Oracle Tuxedo RECORD型付きバッファ
Oracle Tuxedo RECORD型付きバッファでは、COBOLコピーブック情報を記述できます。
リスト2-16に、myRecordというCOBOLコピーブック・ファイルを示します。
リスト2-16 COBOLコピーブックmyRecord
01 myRecord.
05 name occurs 1 times PIC X(10).
05 num occurs 1 times PIC S9(9) COMP-5.
05 subgroup occurs 1 times.
10 long1 PIC S9(9) COMP-5.
10 string1 PIC X(19).
 
リスト2-17 RECORD型付きバッファのSOAPメッセージ
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:urn="urn:pack.TuxAll_typedef.salt11">
<soapenv:Header/>
<soapenv:Body>
<urn:QUERY soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<inbuf xsi:type="urn:record_QUERY_In_myRecord">
<name>John</name>
<num xsi:type="xsd:int">999</num>
<subgroup xsi:type="urn:record_QUERY_In__p3">
<long1 xsi:type="xsd:int">1000</long1>
<string1>abcd</string1>
</subgroup>
</inbuf>
</urn:QUERY>
</soapenv:Body>
</soapenv:Envelope>
 
<inbuf>のXMLスキーマをリスト2-18に示します。
リスト2-18 RECORD型付きバッファのスキーマ
<xsd:complexType name="record_QUERY_In_myRecord">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="num" type="xsd:int"></xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="subgroup" type="tuxtype:record_QUERY_In__p3"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="record_QUERY_In__p3">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="long1" type="xsd:int"></xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="string1">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="19"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType
 
REDEFINESの処理
REDEFINESはコアのRECORD実装を使用して処理され、この実装では、選択の決定を実行するためにブール式を使用するcpy2recordバイナリ出力を取得します。GWWSでは、レコードを処理および使用するときにこれらの機能を使用して、発信メッセージ(着信応答と発信リクエスト)で選択する再定義メンバーを決定します。
着信メッセージ(着信リクエストと発信応答)の場合、選択はもう一方の側で実行されている必要があります。
cpy2recordバイナリを利用するために、GWWSはRECORD記述ファイル(たとえば、VIEW/VIEW32コンパイル済定義)をロードし、RECORDFILES/RECORDDIR環境変数を使用します。MIFファイルでキーワードunionを指定すると、アイテムはREDEFINE関係を維持します。
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プログラムとの間で互換性を確保する場合に使用するものです。フィールドの型としてはshortlongstringのみ使用します。
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関連、あらゆるURL、QName、NOTATION)
FLD_STRING
char [ ]
対応するXML組込みデータ型の値パターンに準拠する必要があります。そうしないと、サーバー側のWebサービスはリクエストを受け付けません。
次のサンプルでは、XMLスキーマの組込み単純な型のOracle Tuxedoプログラムでデータを作成する方法を示します。
 
 
表2-4 XMLスキーマの組込み型のサンプル - xsd:string
XMLスキーマ定義
 
<xsd:element name=���message��� type=���xsd:string��� />
対応するFML32フィールド定義(FLD_MBSTRING)
 
# Field_name Field_type Field_flag Field_comments
message mbstring -
C Pseudoコード
 
FBFR32 * request;
FLDLEN32 len, mbsize = 1024;
char * msg, * mbmsg;
msg = calloc( ... ); mbmsg = malloc(mbsize);
...
strncpy(msg, ���...���, len); /* The string is UTF-8 encoding */
Fmbpack32(���utf-8���, msg, len, mbmsg, &mbsize, 0); /* prepare mbstring*/
Fadd32( request, message, mbmsg, mbsize);
 
表2-5 XMLスキーマの組込み型のサンプル - xsd:hexBinary
XMLスキーマ定義
 
<xsd:element name=���mem_snapshot��� type=���xsd:hexBinary��� />
対応するFML32フィールド定義(FLD_MBSTRING)
 
# Field_name Field_type Field_flag Field_comments
mem_snapshot carray -
C Pseudoコード
 
FBFR32 * request;
FLDLEN32 len;
char * buf;
buf = calloc( ... );
...
memcpy(buf, ���...���, len); /* copy the original memory */
Fadd32( request, mem_snapshot, buf, len);
 
表2-6 XMLスキーマの組込み型のサンプル - xsd:date
XMLスキーマ定義
 
<xsd:element name=���IssueDate��� type=���xsd:date��� />
対応するFML32フィールド定義(FLD_STRING)
 
# Field_name Field_type Field_flag Field_comments
IssueDate string -
C Pseudoコード
 
FBFR32 * request;
char date[32];
...
strcpy(date, ���2007-06-04+8:00���); /* Set the date value correctly */
Fadd32( request, IssueDate, date, 0);
XMLスキーマのユーザー定義データ型のマッピング
表2-7に、サポート対象のXMLスキーマのユーザー定義の単純なデータ型および対応するOracle Tuxedo FML32のフィールド・データ型の一覧を示します。
 
表2-7 サポート対象のXMLスキーマのユーザー定義データ型
XMLスキーマのユーザー定義
データ型
Oracle Tuxedo FML32のフィールド・データ型
Oracle TuxedoプログラムのC/C++プリミティブ型
注意
<xsd:anyType>
FLD_MBSTRING
char []
要素タグがある全文の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フィールドとして定義されます。
fml32バッファには1つのサブ・フィールドのみを追加してください。
<xsd:complexType>とサブ要素は、順番に従ってコンポジット化されます。complexTypeには属性と要素を含めることができます。
FLD_FML32
FBFR32 *埋め込みfml32バッファ
複合型の各サブ要素は埋込みFML32フィールドとして定義されます。
次のサンプルでは、XMLスキーマのユーザー定義データ型のOracle Tuxedoプログラムでデータを作成する方法を示します。
 
表2-8 XMLスキーマのユーザー定義型のサンプル - プリミティブで単純な型から派生したxsd:simpleType
XMLスキーマ定義
 
<xsd:element name=���Grade��� type=���Alphabet��� />
<xsd:simpleType name=���Alphabet���>
<xsd:restriction base=���xsd:string���>
<xsd:maxLength value=���1��� />
<xsd:pattern value=���[A-Z]��� />
</xsd:restriction>
</xsd:simpleType>
対応するFML32フィールド定義(FLD_STRING)
 
# Field_name Field_type Field_flag Field_comments
Grade string -
C Pseudoコード
 
char grade[2];
FBFR32 * request;
...
grade[0] = ���A���; grade[1] = ���\0���;
Fadd32( request, Grade, (char *)grade, 0);
 
表2-9 XMLスキーマのユーザー定義型のサンプル - xsd:listで定義されたxsd:simpleType
XMLスキーマ定義(ターゲット・ネームスペース"urn:sample.org")
 
<xsd:element name=���Users��� type=���namelist��� />
<xsd:simpleType name=���namelist���>
<xsd:list itemType=���xsd:NMTOKEN���>
</xsd:simpleType>
対応するFML32フィールド定義(FLD_MBSTRING)
 
# Field_name Field_type Field_flag Field_comments
Users mbstring -
C Pseudoコード
 
char * user[5];
char users[...];
char * mbpacked;
FLDLEN32 mbsize = 1024;
FBFR32 * request;
...
sprintf(users, ���<n1:Users xmlns:n1=\���urn:sample.org\���>���);
for ( i = 0 ; i < 5 ; i++ ) {
strcat(users, user[i]);
strcat(users, ��� ���);
}
strcat(users, ���</n1:Users>���);
...
mbpacked = malloc(mbsize);
/* prepare mbstring*/
Fmbpack32(���utf-8���, users, strlen(users), mbpacked, &mbsize, 0);
Fadd32( request, Users, mbpacked, mbsize);
注意:
表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を使用して、RESTfulサービスとして公開されているOracle Tuxedoサービスの入力としてVIEW32バッファを使用しており、VIEW32MBSTRING型が含まれている場合、一部のコンテンツについては、問合せの呼出し文字列をデフォルトではなくMBSTRING型のフィールドとして指定する必要があります。
そのようにしないと、呼出しの結果はHTTP 500エラーになり、TPEINVALが返され、次のULOGメッセージが表示されます。
...
181356.hostname!server.5535.451673280.0: GP_CAT:1582: ERROR: Input codeset encoding argument not defined
...
着信メッセージ変換
この項には次のトピックが含まれます:
問合せ文字列のマッピング
GETおよびDELETEメソッドの場合、入力データはHTTP問合せ文字列として渡されます。
問合せ文字列として渡されたデータは、次のような問合せ文字列表示の制約に従ってマップされます。
該当する場合はkeyword=valueのモデルシンプル・バッファ・タイプの場合、実際のデータは直接渡されます(http://host:1234/myTOUPPER?inputstringなど)。
キーワード/値のペアはネストできません。
一部の文字(空白など)にはエンコーディングが必要です。
データ量に制約があります。GWWSにはありせんが、ブラウザまたはツールキットによる制約を受ける場合があります。
Oracle 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
Oracle Tuxedo MBSTRINGUTF-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メンバーに変換しようとします(文字列表現からOracle Tuxedo表現の数値)。
floatおよびdoubleのVIEW/VIEW32タイプのfloat表記
intの整数表記、longおよびその他の整数ベースのタイプ
FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその他のすべてのタイプについては%xx表現文字列)。
次のものには、fieldname=valueの表記を使用します。
ビュー記述で構成されている場合は、FBNAMEフィールド名。
ビュー記述にFBNAMEがない場合のCNAME値。
FBNAMECNAMEのどちらもこのサブタイプと一致しない場合は、マッピング・エラーが返されます。
FML/FML32
http://host:port/service?fieldname1=value1&fieldname2=value2
または、複数オカレンスの場合:
http://host:port/service?fieldname1=value1&fieldname1=value2
実際の値は、URLエンコードされた文字列表現からそれらのネイティブ・タイプに変換されます。
GWWSは、ターゲット・タイプに応じて、値を対応するVIEWFML/VIEWFML32メンバーに変換しようとします(文字列表現からOracle Tuxedo表現の数値)。
floatおよびdoubleのVIEWFML/VIEWFML32タイプの浮動表記
intの整数表記、longおよびその他の整数ベースのタイプ
FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその%xx表現)。
その他のすべてのタイプについては文字列
RECORD
http://host:port/service?value1&value2またはhttp://host:port/service?fieldname1=value1&fieldname2=value2
実際の値は、URLエンコードされた文字列表現からそれらのネイティブ・タイプに変換されます。
GWWSは、ターゲット型に応じて、値を対応するRECORDバッファ・メンバーに変換しようとします。
JSONデータ・マッピング
様々なOracle Tuxedoバッファ型とJSONとの間の変換は、表2-13のように行われます。
 
表2-13 JSONデータ・マッピング
Oracle 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フィールド・タイプは次のようにマップされます(Oracle Tuxedoタイプ: JSONタイプ)。
フィールド名マッピングの詳細は、VIEW/VIEW32の考慮事項と例を参照してください。
一部のタイプは、プリミティブ型(long longlong 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*または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フィールド・タイプは次のようにマップされます(Oracle 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コンテンツ(EVIEW32FLD_VIEW32 fml32タイプです):
{"EVIEW32" :
{"v32example":
{"flag1":"x",
"str":"somestring"}
}
}
RECORD
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
生成されるCOBOLフィールド型は次のようにマップされます(Tuxedo型: JSON型)。
 
生成されるCOBOL型:
RECORD: ネストされたJSONレコード
COMP-1: Number
COMP-2: Number
S9(18): Number
9(18): Number
S9(9): Number
9(9): Number
S9(4): Number
S9(10)V9(10)COMP-3L: Number
X(1024): String
@binary=true: String
 
注意:
非構造化バッファ・タイプ(STRINGCARRAYX_OCTETMBSTRING)はデータをJSONオブジェクトとしてラップしません。データはそのまま転送されます。
JSONでは、すべての浮動小数点型はXMLとは異なり内部的に処理されます。XMLでの浮動小数点の変換では、JSONの類似の変換に比べて精度が多少失われます。これは現時点での制約です。
VIEW/VIEW32に関する考慮事項
Oracle Tuxedo VIEW/VIEW32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとVIEW/VIEW32との変換するための環境を用意する必要があります。これには、VIEWディレクトリおよびシステムVIEW定義ファイルの設定が含まれます。GWWSサーバーはこれらの定義を自動的にロードします。
FML/FML32の考慮事項
Oracle Tuxedo FML/FML32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとFML/FML32を相互に変換するための環境を用意する必要があります。これには、FMLフィールド表ファイルのディレクトリおよびシステムFMLフィールド定義ファイルの設定が含まれます。GWWSはこれらの定義を自動的にロードします。FML型付きバッファは、環境が正しく設定されている場合に限って処理できます。
注意:
FML32フィールド型FLD_PTRはサポートされていません。
XMLデータ・マッピング
XMLデータ・マッピングは、SOAPモードで使用されるマッピングと類似のルールを使用して実行されます。
次の点が異なります。
10進値を持たない浮動小数点数値は、整数として表現されます。たとえば、10.0は10と出力されます。これは現時点での制約です。
RESTモードにはインタフェースがないため、ネームスペースは生成または処理されません。
シンプル・バッファ(STRINGCARRAYMBSTRINGXML)は、XML処理なしにそのまま送受信されます。動作はJSON処理と同じです(つまり、マッピングは必要ありません)。
FMLおよびFML32のリクエストは、ルート要素(XMLが適切に構成されていないかぎり、名前は無視されます)によってラップされ、応答は、SALTDEPLOY構成ファイルのREST/Service/Method/@inputbuffer属性で指定されるサブタイプと同じ名前の要素または<root>要素(サブタイプが構成されていない場合)にラップされます。VIEWVIEW32X_COMMONおよびX_C_TYPEバッファはサブタイプ名をルート要素名として使用します。
様々なOracle Tuxedoバッファ型とXMLとの間の変換は、表2-14のように行われます。
 
表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*または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_PTRFLD_MBSTRINGFLD_FML32FLD_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>
 
RECORD
RECORDバッファ・タイプは、コピーブック・レコードを表します。RECORD型には、個々のレコード構造体を示すサブタイプが必要です。
生成されるCOBOL型:
RECORD
COMP-1
COMP-2
S9(18)
9(18)
S9(9)
9(9)
S9(4)
S9(10)V9(10)
X(1024)
@binary=true
<myRecord>
  <name>aaa</name>
  <num>1000</num>
  <subgroup>
    <long1> 3000 </long1>
    <string1> www </string1>
  </subgroup>
</myRecord>
注意:
非構造化バッファ・タイプ(STRINGCARRAYX_OCTETMBSTRING)はデータをXMLオブジェクトとしてラップしません。データはそのまま転送されます。
VIEW/VIEW32に関する考慮事項
Oracle Tuxedo VIEW/VIEW32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとVIEW/VIEW32との変換するための環境を用意する必要があります。これには、VIEWディレクトリおよびシステムVIEW定義ファイルの設定が含まれます。GWWSサーバーはこれらの定義を自動的にロードします。
FML/FML32の考慮事項
Oracle Tuxedo FML/FML32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとFML/FML32を相互に変換するための環境を用意する必要があります。これには、FMLフィールド表ファイルのディレクトリおよびシステムFMLフィールド定義ファイルの設定が含まれます。GWWSはこれらの定義を自動的にロードします。FML型付きバッファは、環境が正しく設定されている場合にのみ処理できます。
注意:
FML32フィールド型FLD_PTRはサポートされていません。
発信メッセージ変換
この項には次のトピックが含まれます:
問合せ文字列のマッピング
注意:
このモードでは、組込みFML32およびVIEW32フィールドを使用しようとすると、TPEPROTOエラーが発生します。
GETおよびDELETEメソッドの場合、リクエスト・データはHTTP問合せ文字列として渡されます。例: http://host:1234/banking?account=1234
問合せ文字列として渡されたデータは、次のような問合せ文字列表示の制約に従ってマップされます。
該当する場合はkeyword=valueのモデルシンプル・バッファ・タイプの場合、実際のデータは直接渡されます(http://host:1234/svc?inputstringなど)。
キーワード/値のペアはネストできません。
一部の文字(空白など)にはエンコーディングが必要です。
データ量に制約があります。GWWSにはありせんが、ブラウザまたはツールキットによる制約を受ける場合があります。
Oracle Tuxedoでサポートされる様々な型のバッファのマッピングは、表2-15の説明のようになります。
 
表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 MBSTRINGUTF-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メンバーに変換しようとします(文字列表現からOracle Tuxedo表現の数値)。
floatおよびdoubleのVIEW/VIEW32タイプの浮動表記
intの整数表記、longおよびその他の整数ベースのタイプ
FLD_CHARフィールドは、URLエンコードされたコンテンツから変換されます(表現可能な文字、またはその%xx表現)。
その他のすべてのタイプについては文字列
次のものには、fieldname=valueの表記を使用します。
ビュー記述で構成されている場合は、FBNAMEフィールド名。
ビュー記述にFBNAMEがない場合のCNAME値。
FBNAMECNAMEのどちらもこのサブタイプと一致しない場合は、マッピング・エラーが返されます。
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表現)。
その他のすべてのタイプについては文字列
RECORD
http://host:port/path?value1&value2または
http://host:port/service?fieldname1=value1&fieldname2=value2
GWWSは、ターゲット型に応じて、値を対応するRECORDメンバーに変換しようとします。
JSONデータ・マッピング
様々なTuxedoバッファ型とJSONとの間の変換は、表2-16のように行われます。
 
表2-16 JSONデータ・マッピング
Oracle 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*またはwchar_t: String
unsigned int: Number
unsigned long: Number
 
 
long double: String (注意を参照)
mbstring: String
view32: ネストされたJSONレコード
 
フィールド名マッピングの詳細は、VIEW/VIEW32の考慮事項と例を参照してください。
一部のタイプは、プリミティブ型(long longlong 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 v32 example
charflag1 - 1 ---
string str - 1 100
- -
JSONコンテンツ(EVIEW32はFLD_VIEW32 fml32タイプです):
{"EVIEW32" :
 {"v32example":
{"flag1":"x",
"str":"somestring"}
}
}
RECORD
{'<fieldname>':'<fieldcontent>', '<fieldname>':'<fieldcontent>'}
ネスト可能:
{'<fieldname>':{'<fieldname>':'<fieldcontent>'}}
RECORDバッファ・フィールド型は次のようにマップされます(Tuxedo型: JSON型)。
 
RECORD: Number
COMP-1: Number
COMP-2: Number
S9(18): Number
9(18): Number
S9(9): Number
9(9): Number
S9(4): Number
S9(10)V9(10)COMP-3L: Number
X(1024): String
@binary=true: String
 
注意:
非構造化バッファ・タイプ(STRINGCARRAYX_OCTETMBSTRING)はデータをJSONオブジェクトとしてラップしません。データはそのまま転送されます。データのマッピングに関するバッファ・タイプのcontent-type設定は無視されます。
JSONでは、すべての浮動小数点型はXMLとは異なり内部的に処理されます。XMLでの浮動小数点の変換では、JSONの類似の変換に比べて精度が多少失われます。これは現時点での制約です。
VIEW/VIEW32に関する考慮事項
Oracle Tuxedo VIEW/VIEW32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとVIEW/VIEW32との変換するための環境を用意する必要があります。これには、VIEWディレクトリおよびシステムVIEW定義ファイルの設定が含まれます。GWWSサーバーはこれらの定義を自動的にロードします。
FML/FML32の考慮事項
Oracle Tuxedo FML/FML32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとFML/FML32を相互に変換するための環境を用意する必要があります。これには、FMLフィールド表ファイルのディレクトリおよびシステムFMLフィールド定義ファイルの設定が含まれます。GWWSはこれらの定義を自動的にロードします。FML型付きバッファは、環境が正しく設定されている場合にのみ処理できます。
注意:
FML32フィールド型FLD_PTRはサポートされていません。
変換の例:
リスト2-19 VIEW記述ファイル
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-20 コンパイル
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-21 JSONコンテンツの例
{
"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-22 VIEW記述
VIEW empname
#TYPE CNAME FBNAME COUNT FLAG SIZE NULL
char fname - 1 - 25 -
char minit - 1 - 1 -
char lname - 1 - 25 -
END
 
コンパイル後の対応するヘッダー・ファイル
リスト2-23 コンパイル
struct empname {
char fname[25];
char minit;
char lname[25];
};
 
リスト2-24 JSONコンテンツの例
{
"fname":"John",
"minit":"R",
"lname":"Smith"
}
 
FML32の例
リスト2-25 フィールド表
#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-26 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"},
]
}
}
 
Recordの例。
リスト2-27 COBOLコピーブック
01 myRecord.
05 name occurs 1 times PIC X(10).
05 num occurs 1 times PIC S9(9) COMP-5.
05 subgroup occurs 1 times.
10 long1 PIC S9(9) COMP-5.
10 string1 PIC X(19).
 
リスト2-28 結果
{
"name": "aaa",
"num": 1000,
"subgroup": {
"long1": 3000,
"string1": "wwww"
}
}
 
XMLデータ・マッピング
XMLデータ・マッピングは、SOAPモードで使用されるマッピングと類似のルールを使用して実行されます。
次の点に注意してください。
10進値を持たない浮動小数点数値は、整数として表現されます。たとえば、10.0は10と出力されます。これは現時点での制約です。
HTTPモードにはインタフェースがないため、ネームスペースは生成または処理されません。
シンプル・バッファ(STRINGCARRAYMBSTRING、XML)は、XML処理なしにそのまま送受信されます。動作はJSON処理と同じです(つまり、マッピングは必要ありません)。
FMLおよびFML32のリクエストは、ルート要素(XMLが適切に構成されていないかぎり、名前は無視されます)によってラップされる必要があります。また、応答は、SALTDEPLOY構成ファイルのHTTP/Service/@outputbuffer属性で指定されるサブタイプと同じ名前の要素または<root>要素(サブタイプが構成されていない場合)にラップされます。VIEW、VIEW32、X_COMMONおよびX_C_TYPEバッファはサブタイプ名をルート要素名として使用します。
様々なOracle Tuxedoバッファ型とXMLとの間の変換は、表2-17のように行われます
 
表2-17 XMLデータ・マッピング
Oracle 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*または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_PTRFLD_MBSTRINGFLD_FML32FLD_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>
 
RECORD
RECORDバッファ・タイプは、コピーブック・レコードを表します。RECORD型には、個々のレコード構造体を示すサブタイプが必要です。
生成されるCOBOL型:
RECORD
COMP-1
COMP-2
S9(18)
9(18)
S9(9)
9(9)
S9(4)
S9(10)V9(10)
X(1024)
@binary=true
<myRecord>
  <name>aaa</name>
  <num>1000</num>
  <subgroup>
    <long1> 3000 </long1>
    <string1> www </string1>
  </subgroup>
</myRecord>
注意:
非構造化バッファ・タイプ(STRINGCARRAYX_OCTETMBSTRING)はデータをXMLオブジェクトとしてラップしません。データはそのまま転送されます。
VIEW/VIEW32に関する考慮事項
Oracle Tuxedo VIEW/VIEW32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとVIEW/VIEW32との変換するための環境を用意する必要があります。これには、VIEWディレクトリおよびシステムVIEW定義ファイルの設定が含まれます。GWWSサーバーはこれらの定義を自動的にロードします。
FML/FML32の考慮事項
Oracle Tuxedo FML/FML32バッファとXMLとの変換に関しては、次の点を考慮する必要があります。
XMLとFML/FML32を相互に変換するための環境を用意する必要があります。これには、FMLフィールド表ファイルのディレクトリおよびシステムFMLフィールド定義ファイルの設定が含まれます。GWWSはこれらの定義を自動的にロードします。FML型付きバッファは、環境が正しく設定されている場合にのみ処理できます。
注意:
FML32フィールド型FLD_PTRはサポートされていません

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