メッセージの妥当性検査

始める前に:

メッセージ・フロー・ノードおよびMRM パーサーおよびドメインに関する概念トピックに目を通しておきます。

ブローカーは、事前定義メッセージのためのメッセージ辞書に基づいた妥当性検査を提供します。 したがって、妥当性検査は、MRM ドメインに対してモデル化および定義したメッセージにのみ適用します。

ブローカーは、自己定義メッセージの妥当性検査は提供しません。 XML DTD または XML スキーマに対して直接メッセージの妥当性検査を行うことはできません。 代わりに、Message Brokers Toolkit を使用して XML DTD または XML スキーマをインポートすることにより、同等のモデルを MRM ドメインに作成します。

メッセージ・フローは、特定の規則に合致するメッセージを変換して経路を定めるように設計されています。 デフォルトでは、MRM パーサーはメッセージに対して妥当性検査を実行しますが、これは構文解析操作の完全性を保証するだけのものです。 しかしながら、メッセージ・フロー内の特定のノード上に妥当性検査オプションを指定することによって、メッセージ・ディクショナリー内に含まれるメッセージ・モデルに対する、より厳重なメッセージの妥当性検査を実行することができます。

次のメッセージの妥当性検査を行うオプションを使用することができます。

これらの妥当性検査オプションは、メッセージ・フローに入るデータとそこから出るデータの妥当性を保証することができます。 このオプションは、以下の目的で実行される妥当性検査に対する、ある程度の制御をユーザーに提供します。

また、妥当性検査が失敗した場合に行うアクションを指定することもできます。

メッセージ妥当性検査には、メッセージ・ツリーをナビゲートし、その妥当性を検査することが含まれています。 これは、メッセージの構文解析時には、ツリー作成の延長であり、出力メッセージの書き込み時には、ビット・ストリーム作成の延長です。

妥当性検査オプションは、以下のノード上で使用できます。

ノード・タイプ 妥当性検査オプションを持つノード
入力ノード MQInput、SCADAInput、HTTPInput、JMSInput、TimeoutNotification
出力ノード MQOutput、MQReply、SCADAOutput、HTTPReply、JMSOutput
その他のノード Compute、Mapping、JavaCompute、Validate、ResetContentDescriptor、MQGet、HTTPRequest

妥当性検査オプションは、ESQL CREATE ステートメントおよび ASBITSTREAM 関数でも指定できます。

入力データで受け取った入力メッセージを妥当性検査するには、入力ノードで妥当性検査プロパティーを指定します。 その後入力メッセージは、メッセージ・ビット・ストリームが構文解析されてメッセージ・ツリーを形成するときに妥当性検査されます。

このときにメッセージ全体が構文解析されて妥当性検査されるのか、それともメッセージ内の個々のフィールドが参照されるときにのみ構文解析され妥当性検査されるのかを制御するために、入力ノードの「構文解析のタイミング」プロパティーを使用することもできます。

Compute ノード、Mapping ノード、または JavaCompute ノードによって作成される出力メッセージを妥当性検査するには、それらのノード自体で妥当性検査プロパティーを指定するか、またはメッセージを送信する出力ノードで妥当性検査プロパティーを指定するかのいずれかを行います。 妥当性検査は、出力ノードによってメッセージ・ツリーからメッセージ・ビット・ストリームが作成される際に行われます。

別の方法として、Validate ノードを使用して、メッセージ・フローの特定の箇所でメッセージ・ツリーを妥当性検査することもできますし、あるいは Compute、Filter、または Database ノード内で ESQL ASBITSTREAM 関数を使用することもできます。

妥当性検査の設定を変更せずそのままにしておけば、デフォルトで、限定された妥当性検査が行われます。 このデフォルト・レベルでは、次のうちのいずれか 1 つが真の場合に、例外がスローされます。
  • データの不一致がある場合。その場合例えば、パーサーは、指定されたフィールド・タイプに与えられたデータを解釈することができない。
  • 出力メッセージ内のエレメントの順序が、論理メッセージ・ツリー内の順序と一致しない (CWF および TDS 固定長モデルのみ)。
加えて、MRM パーサーはデフォルトで、次のような状況で限定的な修復アクションを実行します。
  1. 固定形式の出力で無関係のフィールドが廃棄される (CWF および TDS 固定長モデルのみ)
  2. 必須内容が欠落している場合、固定形式の出力で (使用可能な場合に) デフォルトが提供される (CWF および TDS 固定長モデルのみ)
  3. ツリー内のエレメントのデータ・タイプが辞書内で指定されたものと一致しない場合に、可能であれば、出力のデータ・タイプがすべての形式で辞書の定義と一致するように変換されます。

ただし、妥当性検査オプションを使用して、もっと徹底したメッセージの妥当性検査を要求することもできます。 例えば、次のうちのいずれか 1 つ以上の条件を妥当性検査して例外をスローさせたり、エラーをログに記録したりすることができます。

の例は、これらの妥当性検査オプションのいくつかを例示しています。

妥当性検査オプションを使用する際には以下の動作について理解しておくことが重要です。
  • 「要求時」構文解析 (部分構文解析とも呼ばれる) を実行するかどうかを制御する「構文解析のタイミング」プロパティーは、入力メッセージ (メッセージ・ヘッダーを含む) の妥当性検査のタイミングに影響を与えます。

    「構文解析のタイミング」について詳しくは、MRM ドメインのメッセージの妥当性検査プロパティーを参照してください。

  • メッセージ・ツリーが出力ノードに渡されると、出力ノードはデフォルトでメッセージ・ツリーで実行されている妥当性検査オプションを継承します。 これらのオプションは、出力ノードに対して妥当性検査オプションの新規セットを指定することによってオーバーライドできます。
  • メッセージ・ツリーが入力として Compute、Mapping、または JavaCompute ノードに渡されると、Compute、Mapping、または JavaCompute ノードによって作成される新規出力メッセージ・ツリーの妥当性検査オプションはすべてそのノード自体によって指定されます (メッセージ全体がコピーされる場合も同様)。 この動作はオーバーライド可能で、ノードによって作成されるメッセージが入力メッセージ・ツリーの妥当性検査オプションを継承するように指定することができます。
  • ビット・ストリームが書き込まれ、妥当性検査オプションが適用される場合、メッセージ全体が妥当性検査されます。 メッセージ・ツリーに未解決のタイプが含まれている場合があります (例えば、Compute ノードが未解決のタイプを、解決しないまま入力メッセージから出力メッセージへコピーした場合)。 そのようなタイプに遭遇した場合、そのタイプを妥当性検査することはできないため、妥当性検査エラーが発生します。 このことを防ぐには、すべての未解決のタイプが、出力メッセージにコピーされる前に必ず解決されるようにします。

各種のプロパティーを使用しての妥当性検査の制御方法については、MRM ドメインのメッセージの妥当性検査プロパティーを参照してください。

関連概念
事前定義および自己定義メッセージ
メッセージ・フローの概要
関連タスク
メッセージ・フローの設計
メッセージ・フローの作成
メッセージ・フローの内容の定義
関連資料
組み込みノード
MRM ドメインのメッセージの妥当性検査プロパティー
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac00400_