0

サーバー (SOAP) からの XML 応答があり、複数の値を取得しています。XPath はすべての値を抽出し、Match_1、Match_2、Match_3 などのように内部的に保存します。値を返すことを拒否するだけなので、次のように対処します${Match_1}

例:

応答は複数のcontentGroupID値を返します。
Debug Sampler はそれらを明らかにします:

  • contentGroupID=67
  • contentGroupID_1=67
  • contentGroupID_2=50
  • contentGroupID_3=38
  • contentGroupID_4=54
  • contentGroupID_5=46

次の単一のリクエストでこれらの値をそれぞれ使用する必要があるため、これらの値を配置する必要がある場所に XML 内にコードを追加します。

${__javaScript
(myOutput =''; var names = {};
for (var i = 1; i <= ${contentGroupID_matchNr}; i++) 
{names[i] = "${contentGroupID_" + i + "}";}
for (var j = 1; j <= ${contentGroupID_matchNr}; j++) 
{myOutput = 
myOutput + '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';},
myOutput)
}

ここでは<ns8:forContentGroupId><ns2:id>' + ids + '</ns2:id></ns8:forContentGroupId>、XPath によって一致が見つかった回数だけ、値を持つ XML の部分を配置します。

しかし、魔法は起こりません。リクエストは次のように送信されます。

<ns8:forContentGroupId><ns2:id>${contentGroupID_1}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_2}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_3}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_4}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_5}</ns2:id></ns8:forContentGroupId>

JavaScript コードで BSF Post Processor を設定し、XML で変数を追加した場合も同じことが起こります。

問題は、一体どうすればそれらの魔法の値にアクセスできるのでしょうか?

PSすべてがうまく機能し、ForEach Controllerを使用します。しかし、秘訣は、複数のリクエストを次々に行うのではなく、すべての値を使用して単一のリクエストを行う必要があることです。

4

1 に答える 1

0

ここで解決策を見つけました:

BSF ポスト プロセッサ ウィッチ JavaScript コード:

var myOutput = '';
var names = {};
var str;
var value = 0;
var match = vars.get("contentGroupID_matchNr");
for (var i = 1; i <= match; i++) 
{
var n = i.toString();
str = 'contentGroupID_' + n;
value = vars.get(str);
names[i] = value;
}

for (var j = 1; j <= match; j++) {
myOutput = myOutput +  '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';
}
vars.put("array", myOutput);

さらに、XML 内の ${array} 変数。

話の終わり!=)

于 2013-06-27T13:41:40.603 に答える