ブローカーは、事前定義メッセージのためのメッセージ辞書に基づいた妥当性検査を提供します。
したがって、妥当性検査は、MRM ドメインに対してモデル化および定義したメッセージにのみ適用します。
妥当性検査オプションは、メッセージ本体に適用され、メッセージ・ヘッダーには影響を与えません。
ブローカーは、自己定義メッセージの妥当性検査は提供しません。
メッセージ・フローは、特定の規則に合致するメッセージを変換して経路を定めるように設計されています。
デフォルトでは、MRM パーサーはメッセージを妥当性検査しますが、これは構文解析操作の完全性を保証するだけのものです。
しかしながら、メッセージ・フロー内の特定のノード上に妥当性検査オプションを指定することによって、
メッセージ・ディクショナリー内に含まれるメッセージ・モデルに対する、
より厳重なメッセージの妥当性検査を実行することができます。
次のメッセージの妥当性検査を行うオプションを使用することができます。
- MQInput ノードが受け取る入力メッセージ
- Compute ノードが作成する出力メッセージ
Mapping ノードが作成する出力メッセージ
これらの妥当性検査オプションは、メッセージ・フローに入るデータとそこから出るデータの妥当性を保証することができます。
このオプションは、以下の目的で実行される妥当性検査に対する、ある程度の制御をユーザーに提供します。
- パフォーマンス要件とセキュリティー要件との間のバランスを取る。
- メッセージの入力時やメッセージの出力前など、
メッセージ・フロー実行のさまざまな段階において妥当性検査を実行する。
- ご使用のメッセージ・モデルが完全に記述していないメッセージを処理する。
また、妥当性検査が失敗した場合に行うアクションを指定することもできます。
メッセージ妥当性検査には、メッセージ・ツリーをナビゲートし、その妥当性を検査することが含まれています。
これは、メッセージの構文解析時には、ツリー作成の延長であり、
出力メッセージの書き込み時には、ビット・ストリーム作成の延長です。
妥当性検査オプションは、MQInput ノード、Compute ノードおよび Mapping ノード上で使用できます。
- MQInput ノード
- 入力メッセージの妥当性検査は、メッセージの構文解析時、
またメッセージ・ツリーがビット・ストリームから作成される際に行われます。
このときに、メッセージ全体が構文解析されて妥当性検査されるのか (「タイミング (Timing)」 =
「完全 (Complete)」)、
それともメッセージ内の個々のフィールドが参照されるときにのみ構文解析され妥当性検査されるのか (「タイミング (Timing)」 =
「据え置き (Deferred)」) を指定することができます。
サンプル Airline は、
入力ノードでメッセージ妥当性検査が作動する仕方を示しています。
- Compute ノードと Mapping ノード
- Compute ノードまたは Mapping ノードによって作成されたメッセージは、
メッセージ・ビット・ストリームがメッセージ・ツリーから作成されるときに妥当性検査を実行できます。
これはつまり、たとえ妥当性検査オプションが Compute ノードまたは Mapping ノード上で指定されているとしても、
後続の出力ノードによってメッセージがビット・ストリームに書き込まれるまでは、
妥当性検査は行われないという意味です。
これには、次のような含意があります。
- Compute ノードまたは Mapping ノードによって作成されたメッセージ・ツリーが、
2 番目の Compute ノードまたは Mapping ノードへ入力として渡される場合は、妥当性検査オプションは失われます。
2 番目のノードによって作成されるメッセージ・ツリーには、
たとえメッセージ全体がコピーされた場合であっても、
2 番目のノードによって指定された妥当性検査オプションがあります。
- ビット・ストリームが書き込まれ、妥当性検査オプションが適用される場合、
メッセージ全体が妥当性検査されます。
メッセージ・ツリーに未解決のタイプが含まれている場合があります (たとえば、
Compute ノードが未解決のタイプを、解決しないまま入力メッセージから出力メッセージへコピーした場合)。
そのようなタイプに遭遇した場合、
そのタイプを妥当性検査することはできないため、妥当性検査エラーが発生します。
このことを防ぐには、すべての未解決のタイプが、
出力メッセージにコピーされる前に必ず解決されるようにします。
妥当性検査の設定を変更せずそのままにしておけば、デフォルトで、限定された妥当性検査が行われます。
このデフォルト・レベルでは、次のうちのいずれか 1 つが真の場合に、例外がスローされます。
- 「最小長」または「最大長」ストリング制限が順守されていない場合
- データの不一致がある場合。その場合たとえば、パーサーは、
指定されたフィールド・タイプに与えられたデータを解釈することができない。
- 出力メッセージ内の要素の順序が、
論理メッセージ・ツリー内の順序と一致しない (TDS 固定長および CWF 環境のみ)。
しかしながら、もっと徹底したメッセージの妥当性検査を要求することもできます。
たとえば、次のうちのいずれか 1 つ以上の条件を妥当性検査して例外を発生させたり、エラーをログに記録したりすることができます。
異なったプロパティーを使用しての妥当性検査の制御方法については、妥当性検査プロパティーを参照してください。