メッセージの妥当性検査

ブローカーは、事前定義メッセージ用のメッセージ・セットに基づいた妥当性検査を提供します。

始める前に:

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

妥当性検査は、ブローカーに対してモデル化およびデプロイしたメッセージにのみ適用されます。 具体的に言うと、妥当性検査をサポートするメッセージ・ドメインは、MRM、XMLNSC、、および IDOC です。

ブローカーは、自己定義メッセージの妥当性検査は提供しません。 MRM および IDOC パーサーは、メッセージ・セットから生成されたメッセージ・ディクショナリーに照らして、事前定義メッセージを検証します。 XMLNSC ドメインは、メッセージ・セットから生成された XML スキーマに直接照らして、事前定義メッセージを検証します。

メッセージ・フローは、特定の規則に合致するメッセージを変換して経路を定めるように設計されています。 デフォルトでは、パーサーはメッセージの妥当性検査を実行しますが、それは、解析操作の整合性を確認するためでしかありません。 しかしながら、メッセージ・フロー内の特定のノード上に妥当性検査オプションを指定することによって、メッセージ・セット内にあるメッセージ・モデルに対する、より厳重なメッセージの妥当性検査を実行することができます。

次のメッセージの妥当性検査を行うオプションを使用することができます。
  • 入力ノードが受け取る入力メッセージ
  • ComputeMapping、または JavaCompute ノードなどが作成する出力メッセージ
これらの妥当性検査オプションは、メッセージ・フローに入るデータとそこから出るデータの妥当性を保証することができます。 このオプションは、以下の目的で実行される妥当性検査に対する、ある程度の制御をユーザーに提供します。
  • パフォーマンス要件とセキュリティー要件との間のバランスを取る。
  • 例えば、メッセージの入力時やメッセージの出力前、あるいはその間の任意の時点など、メッセージ・フロー実行のさまざまな段階において妥当性検査を実行する。
  • ご使用のメッセージ・モデルが完全に記述していないメッセージを処理する。

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

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

妥当性検査オプションは、以下のノード上で使用できます。
ノード・タイプ 妥当性検査オプションを持つノード
入力ノード MQInput, SCADAInput, HTTPInput, JMSInput, TimeoutNotification, ,
出力ノード MQOutput, MQReply, SCADAOutput, HTTPReply, JMSOutput, JMSReply, ,
その他のノード Compute, Mapping, JavaCompute, Validate, ResetContentDescriptor, MQGet, HTTPRequest, , , ,

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

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

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

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

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

妥当性検査の設定を変更せずそのままにしておけば、デフォルトで、限定された妥当性検査が行われます。 このデフォルト・レベルでは、次のうちのいずれか 1 つのステートメントが真の場合に、例外がスローされます。
  • データの不一致が起きた場合。例えば、パーサーは、指定されたフィールド・タイプに与えられたデータを解釈することができない。
  • 出力メッセージ内のエレメントの順序が、論理メッセージ・ツリー内のエレメントの順序と一致しない (MRM、CWF、および TDS 固定長モデルのみ)。
加えて、MRM パーサーは、次のような状況で限定的な修復アクションを実行します。
  • 固定形式では、無関係のフィールドは出力で廃棄されます (CWF および TDS 固定長モデルのみ)。
  • 固定形式では、必須内容が欠落している場合、出力で (使用可能な場合に) デフォルト値が提供されます (CWF および TDS 固定長モデルのみ)。
  • すべての形式において、ツリー内のエレメントのデータ・タイプが辞書内で指定されたものと一致しない場合、可能であれば、出力のデータ・タイプが辞書の定義と一致するように変換されます。
ただし、妥当性検査オプションを使用して、もっと徹底したメッセージの妥当性検査を要求することもできます。 例えば、次のうちのいずれか 1 つ以上の条件で妥当性検査して、例外をスローさせたりエラーをログに記録したりすることができます。
  • メッセージ・フロー開始時のメッセージ全体
  • 複合エレメントの「構成」および「内容妥当性検査」が正しいこと
  • すべてのデータ・フィールドに正しいタイプのデータが含まれていること
  • データ・フィールドがメッセージ・モデルの値制約に準拠していること
  • すべての必須フィールドがメッセージ内に存在していること
  • 期待されるフィールドだけがメッセージ内に存在していること
  • メッセージ・エレメントの順序が正しいこと

サンプル・ギャラリーのサンプルは、これらの妥当性検査オプションのいくつかを例示しています。

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

    「構文解析のタイミング」 プロパティーについて詳しくは、要求時の構文解析を参照してください。

  • メッセージ・ツリーが出力ノードに渡されると、デフォルトでは、出力ノードはメッセージ・ツリーで実行されている妥当性検査オプションを継承します。 これらのオプションは、出力ノードに対して妥当性検査オプションの新規セットを指定することによってオーバーライドできます。
  • メッセージ・ツリーが入力として ComputeMapping、、、または JavaCompute ノードに渡されると、ノードによって作成された新規出力メッセージ・ツリーの妥当性検査オプションはすべて、そのノード自体によって指定されます (メッセージ全体がコピーされる場合も同様)。この動作を指定変更して、ノードによって作成されたメッセージが入力メッセージ・ツリーの妥当性検査オプションを継承するように指定することができます。
  • (MRM ドメインのみ) ビット・ストリームが書き込まれ、妥当性検査オプションが適用される場合、メッセージ全体が妥当性検査されます。 未解決のタイプがメッセージ・ツリーに入っている場合があります (例えば、Compute ノードが未解決のタイプを、解決しないまま入力メッセージから出力メッセージへコピーした場合)。 そのようなタイプに遭遇した場合、そのタイプを妥当性検査することはできないため、妥当性検査エラーが発生します。 このエラーを防ぐには、すべての未解決のタイプが、出力メッセージにコピーされる前に必ず解決されるようにします。
  • (MRM ドメインのみ) 「固定長ストリングの切り捨て」チェック・ボックスを選択しないでください。切り捨ての前に妥当性検査が行われるので、メッセージ・セットに定義されている長さより固定長フィールドの長さのほうが長いと、固定長フィールドの妥当性検査が失敗するからです。「固定長ストリングの切り捨て」プロパティーについて詳しくは、カスタム・ワイヤー形式メッセージ・セットのプロパティーおよびTDS 形式メッセージ・セットのプロパティーを参照してください。

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

関連概念
パーサー
MRM パーサーおよびドメイン
XML パーサーおよびドメイン
メッセージのモデル化
事前定義および自己定義メッセージ
メッセージ・フローの概要
関連タスク
メッセージ・フローの設計
メッセージ・フローの作成
メッセージ・フローの内容の定義
関連資料
組み込みノード
要求時の構文解析
妥当性検査プロパティー
CREATE ステートメント
ASBITSTREAM 関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:42:34

ac00400_