前のトピック: ペイロード マッピング ファイル次のトピック: CTG Copybook


一致ロジック

XML エレメントと引数の記述に基づいて、一致ロジックの機能を判断できます。 ただし、明確な全体像を示すために、このセクションでは一致について詳細に説明します。

VSE がペイロードを受信すると、一致が以下の段階で発生します。

 

ペイロード

ペイロードは、VSE が新しいペイロードを受信したときに発生する一致の最初の段階です。 この段階では、ペイロード マッピング ファイルのどの <payload> エレメントが受信したペイロードに対応するかが判断されます。 VSE は、ペイロード マッピング ファイル内のエレメントを上から下まで順番に処理することにより、<payload> エレメントを照合します。 最初に一致したものが使用されます。

注: ペイロード エレメントがペイロードに一致しない場合、それは「不明なペイロード」として扱われます。コンテンツは 16 進エンコードされ、汎用の XML 構造でラップされます。 必要に応じて、不明なペイロードは、再生時に自動的にバイトに変換されます。

要求ペイロードの場合

  1. このエレメントの type 属性が「request」の場合、処理を続行します。 それ以外の場合、このエレメントは照合されません。
  2. matchType が argument の場合、キーがこのエレメントの key 属性に一致し、値がこのエレメントの value 属性に一致する要求引数が検索されます。 見つかった場合、このペイロード エレメントは一致します。
  3. matchType が attribute の場合、キーがこのエレメントの key 属性に一致し、値がこのエレメントの value 属性に一致する要求属性が検索されます。 見つかった場合、このペイロード エレメントは一致します。
  4. matchType が metaData の場合、キーがこのエレメントの key 属性に一致し、値がこのエレメントの value 属性に一致する要求メタデータ エントリが検索されます。 見つかった場合、このペイロード エレメントは一致します。
  5. matchType が operation の場合、要求の操作名がこのエレメントの key 属性に一致するかどうかが確認されます。 一致した場合、このペイロード エレメントは一致します。
  6. matchType が payload の場合、このエレメントの keyStart および keyEnd 属性で指定された境界内で key 属性の値が検索されます。 キーがそれらの境界内で見つかった場合、ペイロード エレメントは一致します。
  7. matchType が all の場合、手順 2 ~ 6 が順番に処理され、一致が見つかると停止します。 異なる点は、手順 5 および 6 で key 属性の代わりに value 属性が使用されることのみです。

応答ペイロードの場合(レコーディング中)

  1. 以前に参照された要求のペイロード エレメントの definesResponse 属性が true に設定されている場合、要求のエレメントと同じ名前でタイプが response のペイロード エレメントをすぐに返します。 そのようなエレメントが見つからない場合、一致は存在しません。
  2. 以前に参照された要求のペイロード エレメントの definesResponse 属性が true に設定されていない場合
    1. このエレメントの type 属性が response の場合、処理を続行します。 それ以外の場合、このエレメントは照合されません。
    2. matchType が metaData の場合、キーがこのエレメントの key 属性に一致し、値がこのエレメントの value 属性に一致する応答メタデータ エントリが検索されます。 見つかった場合、このペイロード エレメントは一致します。
    3. matchType が payload の場合、このエレメントの keyStart および keyEnd 属性で指定された境界内で key 属性の値が検索されます。 キーがそれらの境界内で見つかった場合、ペイロード エレメントは一致します。
    4. matchType が all の場合、手順 b と c が順番に実行され、一致が見つかると停止します。 異なる点は、手順 c で key 属性の代わりに value 属性が使用されることのみです。

応答ペイロードの場合(再生中)

再生中は、応答に対して一致は確認されません。 代わりに、レコーディング中に、一致したものがすべて応答オブジェクトの Metadata に保存されます。 その後、再生中にその応答 オブジェクトが返されると、プロセッサは応答の Metadata から値を取得し、その名前(および type="response")のペイロード エレメントを検索して使用します。 そのようなエレメントが存在しない場合、それは回復不可能なエラーと見なされます。

 

セクション

ペイロード エレメントが識別された後、プロセッサは各セクション エレメントを上から下まで順番に確認します。 この段階では、一致は確認されません。 プロセッサがセクションを完全に処理すると(セクション内のいずれの Copybook も一致しない場合)、次のセクションに進み、前のセクションに戻ることはありません。

 

Copybook

一致の最終段階では、ペイロード内のレコードがすべて処理されるまで、このセクション内のどの Copybook を最初に適用し、次に 2 番目以降に適用する順番を判断します。 この段階は、最も複雑な一致段階です。 処理は、以下のとおりです。

  1. プロセッサは、セクション内のすべての Copybook エレメントを確認し、order 属性に指定された数値で並べ替えます。
  2. 最も小さい order の数値を持つ Copybook エレメントのリストが最初に確認されます(ファイルに指定された順番)。 残りのペイロードで、この Copybook エレメントの key 属性の値が検索され、見つかった位置(すべて)のインデックスが保存されます。 残りのペイロードで、この Copybook エレメントの key 属性の値が検索され、見つかった位置(すべて)のインデックスが保存されます。
  3. 最も小さい order の数値のリスト内ですべての Copybook が確認され、いずれかが一致した場合、ペイロードで最初に見つかったものが使用されます。
  4. Copybook が一致した場合、以下の処理を行います。
    1. 一致する Copybook が、以前にこのペイロードに一致していた場合(ペイロード内の前のレコード)、もう一度適用できるかどうか max 属性が確認されます。 max の値に達している場合、これは一致とは見なされず、次に一致する Copybook が使用されます。
    2. max の値に達していない場合、この Copybook がペイロードに適用され、Copybook によって指定されるバイトするが処理されます。 Copybook に length-field フィールド属性が存在する場合は、レコード内のそのフィールドの値を使用して処理するバイト数が判断され、プロセッサは手順 2 に戻ります。
  5. Copybook が一致しなかった場合、次に小さい order の数値を持つ Copybook のリストが、手順 2、3、4 と同じルールを使用して確認されます。 プロセッサは、order の数値のリストに一致する Copybook がないと判断すると、このペイロードに対してその order の数値のリスト(このセクション)の処理を再度試行しません。
  6. すべてのリストを確認して一致が見つからない(または、ペイロードがバイトを使い果たした)場合、プロセッサは次のセクションに進みます。

 

最終処理

ペイロードのすべてのセクションが処理された後、バイトがペイロード内に残されている場合、それらは切り捨てられます。