メッセージの妥当性検査

統合ノードは、事前定義メッセージ用のメッセージ・モデルに基づいた妥当性検査を提供します。

始める前に

メッセージ・フローとパーサー、特に DFDL パーサーおよびドメインXMLNSC パーサーに関する概念トピックをお読みください。

このタスクの概要

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

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

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

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

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

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

妥当性検査オプションは、以下のノード上で使用できます。
ノード・タイプ 妥当性検査オプションを持つノード
Input ノード ファイル入力, FTE 入力, HTTP 入力, JMS 入力, カフカコンシューマー, MQ 入力, MQTTSubscribe, .NETInput, SCA 入力, SOAP 入力,TCPIPClientInput, TCP/IP クライアント受信, TCPIP サーバー入力, TCPIP サーバー受信タイムアウト通知
Output ノード E メール出力, ファイル出力, FTE 出力, HTTP 応答, _ 翻訳不要 _JMSOutput, JMS 応答, カフカプロデューサー, MQOutput, MQ応答, MQTTPublish, SCA 応答, _ 翻訳不要 _SOAPReply, TCPIPClientOutput, TCP/IP サーバー出力
その他のノード 計算, CICS要求, データベース取得, HTTP 要求, ファイル読み取り, JavaCompute (計算), マッピング, MQGET, コンテンツ・ディスクリプターのリセット, SCAA同期応答, SCA 要求, SOAP 要求, SOAPAsync応答, 検証, XSL変換

妥当性検査オプションは、ESQL CREATE ステートメントおよび ASBITSTREAM 関数でも指定できます。 同等の Java™ API メソッド (MBElement 内の createElementAsLastChildFromBitstream () および toBitstream () ) も、検証オプションを提供します。

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

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

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

あるいは、 検証 ノードを使用して、メッセージ・フロー内の特定の場所にあるメッセージ・ツリーを妥当性検査するか、 計算フィルター、または データベース ノードで ESQL ビット・ストリーム 関数を使用します。

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

    構文解析のタイミング プロパティーについて詳しくは、 オンデマンドでの構文解析を参照してください。

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

さまざまなプロパティーを使用して検証を制御する方法については、 妥当性検査プロパティーを参照してください。