このセクションでは、 Fixed Length Message Responder ツールについて紹介します。また、このメッセージ レスポンダーに特有の構成オプションについて説明します。
このセクションの内容:
Fixed Length Message Responder ツールは、XML の利用を可能にすることによって、固定長の使用を簡単にするために設計されたメッセージ レスポンダーです。ユーザーの固定長レスポンス ペイロードを XML ドキュメントとしてモデル化できます。レスポンダーはメッセージを送信する前に XML を固定長に自動的に変換します。レスポンダーが固定長メッセージを受信する場合、レスポンダーはメッセージを XML に変換できるので、 XPath または連結ツールを使用してメッセージ応答条件を定義できます。メッセージ レスポンダーはプロトコルの種類を問いません。トランスポート プロトコルまたはレスポンダーにアクセスするための API は、 PVA のデプロイメント構成で定義されます。
固定長は、標準的な定義のないデータ形式です。一般的には、固定長データ形式は複数のレコードで構成されます。各レコードには 1 つ以上のフィールドがあり、各フィールドの長さは固定です (そのため「固定長形式」という名前で呼ばれます)。通常、フィールドの間に区切りはありません。
簡単な例として、1 行が 1 レコードであり、以下の 2 つのフィールドを持つメッセージを挙げます。
フィールドの長さはそれぞれ 10 文字であり、右寄せで、空白文字で埋められます。
Smith John
Doe Jane
固定長形式のレコードには、別の固定長のレコードを持つセクションがネストされる場合があります。ネストされたセクションには、一定ではない数のレコードが含まれる場合があります。最初の例を基に、2 つ目の固定長形式の例を挙げます。個人ごとに、その人が所有する一定ではない数のペットを指定すると仮定します。上記で使用したデータ形式をベースにして、以下を追加します。
以下はそのようなデータの例です。
Smith John00
Doe Jane02 Cat Fluffy Dog Spot
最初のレコードの人物には 0 匹のペットがあり、2 番目の人物のレコードには 2 匹のペットがあります。ペットのサブセクションには、一定ではない数のペット レコードがあります。
さまざまな固定長形式があるため (そして統一された標準がないため)、Parasoft Virtualize は、簡単な構成によって組織が使用するどんな固定長メッセージでも認識できるよう設計されています。Virtualize で固定長メッセージを設定して検証するには、以下の設定を一度だけ行う必要があります。
固定長データ形式を記述するデータ モデルの定義には、大きく分けて次の 2 つのステップがあります。
Virtualize で固定長メッセージを処理するための最初のステップは、使用する固定長データ形式を記述するデータ モデルを定義することです。
新規データ モデルを作成するには、次の操作を行います。
ウィザードは、ワークスペース内の指定された場所に .datamodel という拡張子のファイルを作成します。ファイルは仮想アセット エクスプローラーには表示されません。ナビゲーター ビューに切り替え、プロジェクト内のファイルを保存した場所を見ると、ファイルが表示されています。
次のステップでは、データ モデル エディターを使用して Virtualize に固定長メッセージの構造を指示します。Virtualize は、この情報を使用してメッセージと XML の間の変換を行います。
新規モデル定義を作成した後、データ モデル エディターが開きます。ナビゲーターでデータ定義ファイルのノードをダブルクリックしてエディターを開くこともできます。
この名前は、ツールでメッセージ形式を識別する際に使用されます。
次に、全体としてのセクションに関する全般的な説明を入力します。名前、含まれるレコード、レコードの区切り、次のレコードの条件などです。
セクション名を指定します。この名前は、メッセージ構成インターフェイスに表示されるほか、変換後の XML の XML タグ名として使用されます (XML で使用できない文字は削除されます)。任意の名前を指定することができます。
セクション内のレコードの名前を指定します。この名前は、メッセージ構成インターフェイスに表示されるほか、変換後の XML の XML タグ名として使用されます (XML で使用できない文字は削除されます)。任意の名前を指定することができます。
セクション内のレコードの区切りとして使用する文字を指定します。オプションの 1 つを選択するか (フィールドをダブルクリックするとメニューが表示されます)、カスタムの区切り文字を入力します。
次のオプションが利用可能です。
固定長メッセージを XML に変換する際に、パーサーがこのセクションの読み込みが終わったと判断するための条件を指定します。このセクションの後に、セクションの一部として処理するべきではない他のコンテンツがある場合、このオプションの指定は重要です。パーサーは、このセクションの処理を終了して次に移る前に、いくつのレコードがあるのかを認識できなければなりません。
有効な値は以下のとおりです。
XPath オプションは、パーサーが当該セクションの定義に従ったコンテンツの処理を続行する条件を指定します。パーサーは、条件 がtrue に評価される間は、セクションが継続していると解釈します。条件が false に評価された場合、パーサーはこのセクションの処理を終了します。レコードの読み取り開始時に条件が適用され、その後のコンテンツがセクションに所属するレコードかどうかが判断されます。
このオプションを選択した場合、[XPath] という新しいオプションが表示されます。コンテンツをこのセクションの定義に従って継続処理する条件を表す XPath 式を入力できます。
条件が評価される際、固定長ドキュメントから生成された XML ドキュメントに対して XPath 式が適用されます。
デフォルトの XPath は count($section/*) < 1
です。 この式の意味を確認してみましょう。$section
は、このコンテキストにだけ適用される特別な XPath 変数です。この変数は、当該セクションを表す XML 要素を指します。$section/*
は、セクション要素のすべての子要素を取得します。基本的に、このセクションに含まれるレコードを表すすべての XML 要素が取得されます。count()
は通常の XPath 関数であり、渡されたノードセットのノード数をカウントします。結果として、count($section/*)
は、それまでの処理で XML ドキュメントに追加されたレコードの数を返します。式全体は、「このドキュメントにすでに追加されたレコードの数が 1 より少ない場合にレコードをこのセクションに追加する」という意味になります。つまり、デフォルトでは 1 レコードだけが追加されます。
しかし多くの場合、読み取るべきレコード数は、ドキュメント内の他のフィールドによって指定されます。 その場合、XPath を使用してレコード数を指定するフィールドを参照します。XPath は作成される XML ドキュメントに対して評価されるため、XML ドキュメント内の XML 要素を参照することを忘れないでください。ドキュメントに "NumberOfPets" というフィールドがある場合、子の要素を指す XPath は $section/../NumberOfPets
となるでしょう。これは、「このセクションを表す XML 要素から開始して、1 つ上の親要素に移動し、NumberOfPets 要素を取得する」という意味になります。つまり、現在の要素の兄弟要素である NumberOfPets
要素を取得します。この場合、XPath 式全体は count($section/*) < $section/../NumberOfPets
となるでしょう。
このコンテキスト固有の XPath 関数として、次の 2 つを使用できます: fixedlen:peek()
および fixedlen:peek-starts-with()
fixedlen:peek()
この関数は、引数として 1 つの整数を受け取ります。 この関数は、固定長ドキュメント内のまだ読み取りおよび XML への変換が行われていないコンテンツを先取りします。これは、このセクションに読み取るべきレコードがまだあるかどうかを、ファイルの後の部分のコンテンツに基づいて判断する場合に使用します。たとえば、次のようにレコードが "<" という文字で始まるケースを例とします。
Doe Jane< Cat Fluffy>< Dog Spot>
この場合、XPath 式は fixedlen:peek(1) = '<'
となります。
fixedlen:peek-starts-with()
この関数は、引数として 1 つの文字列を受け取ります。この関数は、固定長ドキュメント内のまだ読み取りおよび XML への変換が行われていないコンテンツを先取りします。これは、このセクションに読み取るべきレコードがまだあるかどうかを、レコードの開始を通知する何らかの区切り文字に基づいて判断する場合に使用します。たとえば、次のようにレコードが "<" という文字で始まるケースを例とします。
Doe Jane< Cat Fluffy>< Dog Spot>
この場合、XPath 式は fixedlen:peek-starts-with('<')
となります。
fixedlen:peek-starts-with()
関数は、starts-with(fixedlen:peek(1), '<')
という XPath 式と同じです。
デフォルトのオプションは greedy です。ネストされたサブセクションを処理しており、セクションがドキュメントの最後のコンテンツでない場合を除いて、通常はこのオプションを使用します。
[コンポーネント] セクションで、セクションに含まれるフィールドおよび/またはサブセクションの詳細を指定します。複数のフィールドおよび/またはサブセクションを追加できます。
フィールドを追加するには、次の操作を行います。
フィールドごとに以下を設定します。
サブセクションを追加するには、次の操作を行います。
全般的なセクションの詳細を設定する方法の詳細については、「2.セクションについての全般情報の指定」を参照してください。
データ モデル エディターの初期表示では、データ モデルはツリー構造を基にした表に表示されます。ツリー形式では、データ モデルの階層および構造を容易に確認することができます。ツリーが表形式で表示されるため、データ モデル 構造のコンテキスト内で値を編集できます。
このツリー-テーブル ビューでは、次のカテゴリのフィールドを編集することができます。
多数のフィールドにデータを入力する場合、ツリー形式から表形式に切り替えるとよいでしょう。表形式は、単一のセクションにフィールドをすばやく容易に入力することを可能にします。
表ビューに切り替えるには、次の操作を行います。
表ビューはスプレッドシートに似ています。セクションの各フィールドが表の一行で表され、表の列はフィールドのオプションに相当します。このビューでフィールドを追加するには、表の最終行を編集し、矢印キーまたは Enter キーを押します。
以下のボタンも使用できます。
データ モデルのメイン ビューに戻るには、[すべてのデータ モデルに戻る] をクリックします。
データ モデルにいくつものフィールドやセクションを定義した後、すでに定義したフィールドの途中に新しいフィールドを追加する必要があることに気付くケースがあるかもしれません。
そのような場合、次の操作を行います。
データ モデルを定義する過程で、データ モデルが固定長データ形式を正しく反映しているかを検証したい場合があるでしょう。
それには、次の操作を行います。
データ モデルに関連付けられた形式を使用できるようにするためには、定義したデータ モデルを Virtualize で登録する必要があります。この登録は、固定長形式を使用するすべての Virtualize で行う必要があります。Virtualize と SOAtest の両方をインストールしている場合、いずれかでデータ モデルを一度登録すれば、両方の製品でこのデータ モデルを使用できます。
データ モデルの登録には、2 つの方法があります。
いったん登録したら、データ モデルは Fixed Length Message Responder だけでなく XML Converter でも使用できます。 Fixed Length Message Responder ツールは、 [レスポンダーの追加] ウィザードで直接作成できます。
固定長メッセージの構成または検証を行うには、これらのツールの [メッセージ タイプ] メニューで、登録したデータ モデルを選択します。
Fixed Length Message Responder ツールは、他のメッセージ レスポンダーを構成するときのように構成できます。標準のメッセージ レスポンダーの振る舞い (応答条件、パフォーマンス プロファイルなど) を構成する詳細については、「メッセージ レスポンダーの概要」を参照してください。
前のセクションで説明したようにメッセージ タイプを選択すると、Virtualize はフォーム入力ビューにサンプル XML を設定します。このサンプルは、そのまま何も修正せずに固定長データに変換できます。
固定長メッセージ タイプのデータ モデル定義に従って、XML のコンテンツが生成されます。XML には、定義で指定されたセクションおよびフィールドが含まれています。
セクションごとに XML 要素が追加されます。セクション要素には、レコード要素が含まれます。セクションの [次のレコードの条件] オプションの設定によって、セクションに追加されるレコードの数が決定されます。
条件 | 追加されるレコード |
---|---|
fixedCount | [レコード カウント] オプションによってレコード数が決定されます。 |
greedy | 1 レコードだけが追加されます。 |
xpath | XML を生成する際に XPath が評価されます。XPath が true に評価される場合、さらにレコードが追加されます。Virtualize は常に最低 1 つのレコードを追加します。また、まれにしか起こらないケースですが、XPath が多数回 true に評価される場合、100 を超えるレコードは追加しませんこのように追加されるレコード数に制限があるため、XPath 条件を使用すると、まれに、サンプル XML を修正せずに固定長データに変換することができない場合があります。 |
フィールドにはデフォルト値が設定されます。整数および小数フィールドには数値の 1 が設定されます。文字列フィールドには a という値が設定されます。サンプル XML を固定長形式に変換したとき、フィールドの始点と終点が分かりやすいよう、値なし (空の文字列) ではなく、このような値が使用されます。