このセクションでは、 Fixed Length Message Responder ツールについて紹介します。また、このメッセージ レスポンダーに特有の構成オプションについて説明します。
このセクションの内容:
Fixed Length Message Responder とは
Fixed Length Message Responder ツールは、XML の利用を可能にすることによって、固定長の使用を簡単にするために設計されたメッセージ レスポンダーです。ユーザーの固定長レスポンス ペイロードを XML ドキュメントとしてモデル化できます。レスポンダーはメッセージを送信する前に XML を固定長に自動的に変換します。レスポンダーが固定長メッセージを受信する場合、レスポンダーはメッセージを XML に変換できるので、 XPath または連結ツールを使用してメッセージ応答条件を定義できます。メッセージ レスポンダーはプロトコルの種類を問いません。トランスポート プロトコルまたはレスポンダーにアクセスするための API は、 PVA のデプロイメント構成で定義されます。
固定長形式について
固定長は、標準的な定義のないデータ形式です。一般的には、固定長データ形式は複数のレコードで構成されます。各レコードには 1 つ以上のフィールドがあり、各フィールドの長さは固定です (そのため「固定長形式」という名前で呼ばれます)。通常、フィールドの間に区切りはありません。
例
簡単な例として、1 行が 1 レコードであり、以下の 2 つのフィールドを持つメッセージを挙げます。
- last name
- first name
フィールドの長さはそれぞれ 10 文字であり、右寄せで、空白文字で埋められます。
Smith John
Doe Jane
固定長形式のレコードには、別の固定長のレコードを持つセクションがネストされる場合があります。ネストされたセクションには、一定ではない数のレコードが含まれる場合があります。最初の例を基に、2 つ目の固定長形式の例を挙げます。個人ごとに、その人が所有する一定ではない数のペットを指定すると仮定します。上記で使用したデータ形式をベースにして、以下を追加します。
- ペットの数を指定する数字フィールド。長さは 2 文字で、パディングは 0 です。
- 可変の数のセクション。個々のセクションは、ペットの種類とペットの名前のフィールドから構成されます。セクションの数は、ペットの数のフィールドで指定した数と同じです。ペットの種類のフィールドは 5 文字の長さで右揃えされます。ペットの名前のフィールドは 10 文字の長さで右揃えされます。
以下はそのようなデータの例です。
Smith John00
Doe Jane02 Cat Fluffy Dog Spot
最初の人物のレコードには 0 匹のペットがあり、2 番目の人物のレコードには 2 匹のペットがあります。ペットのサブセクションには、一定ではない数のペット レコードがあります。
固定長データ形式の構成: 概要
さまざまな固定長形式があるため (そして統一された標準がないため)、Parasoft Virtualize は、簡単な構成によって組織が使用するどんな固定長メッセージでも認識できるよう設計されています。Virtualize で固定長メッセージを設定して検証するには、以下の設定を一度だけ行う必要があります。
- 使用する固定長メッセージを表すデータ モデルを定義します。
- データ モデルを登録して、Fixed Length Responder および XML Converter で Virtualize がデータ モデルを利用できるようにします。
固定長データ形式を記述するデータ モデルを定義
固定長データ形式を記述するデータ モデルの定義には、大きく分けて次の 2 つのステップがあります。
新規データ モデル定義ファイルの作成
Virtualize で固定長メッセージを処理するための最初のステップは、使用する固定長データ形式を記述するデータ モデルを定義することです。
新規データ モデルを作成するには、次の操作を行います。
- [ファイル] メニューの [新規] > [データ モデル定義ファイル] をクリックします。
- データ モデル定義を保存するファイルの名前と、ワークスペース内での相対的なファイルの場所を指定します(ワークスペースの外にファイルを保存する場合、まずワークスペース内に保存してから移動します)。テストと共にデータ モデル ファイルをソース管理システムにチェックインできるよう、ワークスペース内にデータ モデル ファイルを保存することを推奨します。そうすると、テスト プロジェクトで最新のデータ モデル ファイルを取得するのが容易になります。
- [終了] をクリックします。
ウィザードは、ワークスペース内の指定された場所に .datamodel という拡張子のファイルを作成します。ファイルは仮想アセット エクスプローラーには表示されません。ナビゲーター ビューに切り替え、プロジェクト内のファイルを保存した場所を見ると、ファイルが表示されています。
データ モデル定義の編集
次のステップでは、データ モデル エディターを使用して Virtualize に固定長メッセージの構造を指示します。Virtualize は、この情報を使用してメッセージと XML の間の変換を行います。
新規モデル定義を作成した後、データ モデル エディターが開きます。ナビゲーターでデータ定義ファイルのノードをダブルクリックしてエディターを開くこともできます。
1.データ形式の名前と説明の入力
この名前は、ツールでメッセージ形式を識別する際に使用されます。
2.セクションについての全般情報の指定
次に、全体としてのセクションに関する全般的な説明を入力します。名前、含まれるレコード、レコードの区切り、次のレコードの条件などです。
名前
セクション名を指定します。この名前は、メッセージ構成インターフェイスに表示されるほか、変換後の XML の XML タグ名として使用されます (XML で使用できない文字は削除されます)。任意の名前を指定することができます。
レコード名
セクション内のレコードの名前を指定します。この名前は、メッセージ構成インターフェイスに表示されるほか、変換後の XML の XML タグ名として使用されます (XML で使用できない文字は削除されます)。任意の名前を指定することができます。
レコード セパレーター
セクション内のレコードの区切りとして使用する文字を指定します。オプションの 1 つを選択するか (フィールドをダブルクリックするとドロップダウン リストが表示されます)、カスタムの区切り文字を入力します。
次のオプションが利用可能です。
- {platform newline} - OS の改行コードです (Windows では "\r\n"、Linux では "\n")
- {if} - "\n"
- {crlf} - "\r\n"
- {cr} - "\r"
- {space}
- {tab}
次のレコードの条件
固定長メッセージを XML に変換する際に、パーサーがこのセクションの読み込みが終わったと判断するための条件を指定します。このセクションの後に、セクションの一部として処理するべきではない他のコンテンツがある場合、このオプションの指定は重要です。パーサーは、このセクションの処理を終了して次に移る前に、いくつのレコードがあるのかを認識できなければなりません。
有効な値は以下のとおりです。
- fixedCount - セクションに決まった数のレコードが含まれていることを指示します。パーサーは、ここで指定された数のレコードを処理すると、このセクションの処理を終了します。 このオプションを選択した場合、[レコード カウント] という新しいオプションが表示されるので、そこにセクションに含まれるレコードの数を指定します。
- greedy - ファイルの残りのコンテンツがすべてこのセクションの一部として解釈されるべきであることを指示します。つまり、このセクションの後に他のフィールドまたはセクションがないことを意味します。 この場合、パーサーは「貪欲に (greedily)」残りのコンテンツをすべて処理し、このセクションの定義に従って解釈します。
- xpath - このオプションは、セクションのレコード数が動的に変化し、ドキュメント内の他のコンテンツによって判断される場合に使用します。例としては、ドキュメント内の他のフィールドにセクションのレコード数が指定されている場合が挙げられます。もう 1 つの例としては、セクションの各レコードの先頭に区切り文字がある場合があります。このオプションの詳細については次を参照してください。
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 です。ネストされたサブセクションを処理しており、セクションがドキュメントの最後のコンテンツでない場合を除いて、通常はこのオプションを使用します。
3.コンポーネント フィールドとサブセクションの指定
[コンポーネント] セクションで、セクションに含まれるフィールドおよび/またはサブセクションの詳細を指定します。複数のフィールドおよび/またはサブセクションを追加できます。
フィールドを追加するには、次の操作を行います。
- [コンポーネント] ノードを選択します。
- パネル左下のボックスに [フィールド] を設定します。
- [追加] ボタンをクリックします。
フィールドごとに以下を設定します。
- 名前 - フィールド名を指定します。この名前は、ツールに表示されるほか、変換後の XML の XML タグ名として使用されます (XML で使用できない文字は削除されます)。任意の名前を指定することができます。
- タイプ - 以下のいずれかを選択します。
- 小数 - フィールドに小数値が含まれることを指定します。
- 整数 - フィールドに整数値が含まれることを指定します。
- 文字列 - フィールドに文字列値が含まれることを指定します。
- 長さ - フィールドの長さを指定します。
- 整列 - フィールドの値が (フィールドの長さより短い場合に) 左側に位置するか、右側に位置するかを指定します。
- パディング - フィールドの値がフィールドの長さより短い場合にパディングに使用する文字を指定します。通常は、文字列フィールドにはスペースを使用し、数値フィールドにはスペースまたは 0 を使用します。スペースを使用する場合は {space} と指定します。その他の場合、1 文字の英数字を指定できます。
サブセクションを追加するには、次の操作を行います。
- [コンポーネント] ノードを選択します。
- パネル左下のボックスに [セクション] を設定します。
- [追加] ボタンをクリックします。
全般的なセクションの詳細を設定する方法の詳細については、「2.step2セクションについての全般情報の指定」を参照してください。
ツリー形式での編集
データ モデル エディターの初期表示では、データ モデルはツリー構造を基にした表に表示されます。ツリー形式では、データ モデルの階層および構造を容易に確認することができます。ツリーが表形式で表示されるため、データ モデル 構造のコンテキスト内で値を編集できます。
このツリー-テーブル ビューでは、次のカテゴリのフィールドを編集することができます。
- フリーフォームのテキスト - 単にフィールドに移動して任意のテキストを入力します。
- コンボ ボックスの選択 - これらのフィールドの値は、あらかじめ定義された値から選択することだけができます。フィールドをダブルクリックするとコンボ ボックスが表示され、値を選択できます。または、タブを使用してフィールドに移動し、オプションの最初の 1 文字を入力し (すると該当するオプションが表示されます)、Enter キーを押して次のフィールドに移動します。
- 編集可能なコンボ ボックスの選択 - フィールドをダブルクリックしてコンボ ボックスを表示し、値を選択します。または、フィールドに任意の値を入力します。
表形式での編集
多数のフィールドにデータを入力する場合、ツリー形式から表形式に切り替えるとよいでしょう。表形式は、単一のセクションにフィールドをすばやく容易に入力することを可能にします。
表ビューに切り替えるには、次の操作を行います。
- 編集するセクションの [コンポーネント] ノードを選択します。
- [表の編集] ボタンをクリックします。
表ビューはスプレッドシートに似ています。セクションの各フィールドが表の一行で表され、表の列はフィールドのオプションに相当します。 このビューでフィールドを追加するには、表の最終行を編集し、矢印キーまたは Enter キーを押します。
以下のボタンも使用できます。
- 行を上へ移動 - 1 つ以上の行を選択してこのボタンをクリックすると、行が上に移動します。
- 行を下へ移動 - 1 つ以上の行を選択してこのボタンをクリックすると、行が下に移動します。
- 行の削除 - 1 つ以上の行を選択してこのボタンをクリックすると、行が削除されます。
- 新規行のテンプレート - 表に新しい行が追加された場合、デフォルトで各フィールドに設定されるタイプを指定します。
データ モデルのメイン ビューに戻るには、[すべてのデータ モデルに戻る] ボタンをクリックします。
ビューの切り替え
データ モデルにいくつものフィールドやセクションを定義した後、すでに定義したフィールドの途中に新しいフィールドを追加する必要があることに気付くケースがあるかもしれません。
そのような場合、次の操作を行います。
- データ モデル全体のビューまたはセクションの表ビューで新しいフィールドを追加します。
- セクションの表ビューに切り替えます ([表の編集] をクリックします)。
- 表ビューで行を上下に移動します。これは、データ モデル内でフィールドやセクションを移動する操作に相当します。
- 再びデータ モデル全体のビューに切り替え ([すべてのデータ モデルに戻る] をクリックします)、変更が反映されていることを確認します。
データ モデルの検証
データ モデルを定義する過程で、データ モデルが固定長データ形式を正しく反映しているかを検証したい場合があるでしょう。
それには、次の操作を行います。
- (「データ モデルの登録」 の説明に従って) データ モデルが登録されていることを確認します。
- (「Virtualize ツールでのデータ モデルの使用」 の説明に従って) Fixed Length Responder にデータ モデルを追加します。
- レスポンダーにメッセージを設定します。
データ モデルの登録
データ モデルに関連付けられた形式を使用できるようにするためには、定義したデータ モデルを Virtualize で登録する必要があります。この登録は、固定長形式を使用するすべての Virtualize で行う必要があります。Virtualize と SOAtest の両方をインストールしている場合、いずれかでデータ モデルを一度登録すれば、両方の製品でこのデータ モデルを使用できます。
データ モデルの登録には、2 つの方法があります。
- データ モデル エディターを開いている場合、[データ モデル ディレクトリの登録] リンクをクリックします。すると、編集中のデータ モデルがあるディレクトリ全体が登録されます。
- または、次の操作を行います。
- [Parasoft] メニューの [設定] をクリックします。
- [Parasoft] > [XML 変換] をクリックします。
- [追加] ボタンをクリックします。
- データ モデルがあるディレクトリを指定します。
Virtualize ツールでのデータ モデルの使用
いったん登録したら、データ モデルは 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 を固定長形式に変換したとき、フィールドの始点と終点が分かりやすいよう、値なし (空の文字列) ではなく、このような値が使用されます。