すべての SWIFT メッセージと、SWIFT
フォーマットおよび構文との整合性が、SWIFT データ・ハンドラーによる処理の前に
SWIFT によって検証されます。SWIFT
データ・ハンドラーは、ビジネス・オブジェクトの構造と整合性だけを検証します。
SWIFT データ・ハンドラーは、次のように SWIFT
メッセージからデータを抽出し、ビジネス・オブジェクト内の対応する属性を設定します。
- SWIFT パーサーが呼び出され、最初の 4 ブロック (UUID およびブロック 1 から
3) が 抽出されます。ブロック 2 の SWIFT
アプリケーション・ヘッダーでは、入力属性だけが抽出されます。
- SWIFT データ・ハンドラーが呼び出され、SWIFT メッセージのブロック 2
からビジネス・オブジェクトの名前が抽出されます。
- SWIFT
データ・ハンドラーは、トップレベル・オブジェクトのインスタンスを作成します。
- データ・ハンドラーは、アプリケーション固有の情報パラメーターに基づいて、SWIFT
メッセージ・ブロックを処理します。ブロックは、4
つの異なる方法のいずれかで解析されます。
- parse=no; ブロック・データはタイプ String
として扱われ、解析されません。
- parse=fixlen; ブロック・データは、Block
ビジネス・オブジェクトの最大長属性の値に基づき、固定長構造として解析されます。
- parse=delim; ブロック・データは
{n:data}
という区切られたフォーマットとして解析されます。
- parse=field; この設定は、ブロック 4
のデータでのみ使用されます。フィールドは、汎用または非汎用として解析されます。
- ブロック 4 のデータ (parse=field;)
の場合、データ・ハンドラーは、パーサーから Tag
ビジネス・オブジェクト属性に戻された属性フィールドを突き合わせるか、あるいはフィールドが属す
Sequence ビジネス・オブジェクトを検出します。
- 属性のアプリケーション固有情報が NULL
である場合、子ビジネス・オブジェクトはシーケンスです。データ・ハンドラーは、最初に必要な子ビジネス・オブジェクトの属性がフィールドと一致するかどうかを調べます。
- 一致する場合、データ・ハンドラーは属性に複数のカーディナリティーを割り当て、子ビジネス・オブジェクト用のシーケンスにデータを取り込みます。
- 一致しない場合、データ・ハンドラーは、親ビジネス・オブジェクトの次の属性にスキップします。
- アプリケーション固有の情報が NULL ではない場合、その子は Tag
ビジネス・オブジェクトです。アプリケーション固有の情報に一致する場合、フィールドは、複数のカーディナリティーで処理され、抽出されます。この場合、データ・ハンドラーは
Tag ビジネス・オブジェクトの文字属性およびデータ属性を設定します。
- 非 NULL
フィールドが戻された場合、そのフィールドはログに書き込まれ、例外がスローされます。
- データ・ハンドラーは SWIFT メッセージのブロック 5
を解析します。このブロックのアプリケーション固有情報は常に
block=5; parse=no であり、タイプは
String です。ブロック 5 は単一のストリングとして扱われます。
