多响应生成器是一个功能强大的工具,允许您轻松地处理分层数据场景、一对多异步消息传递等等。
在本章节中:
对于一段 XML(input
),XML 元素名称(elementName
),和后端资产的 URL(backendURL
),多响应生成器在 input
中找到 elementName
的每次出现,并将其分别发送到 backendURL
。后端资产是一个虚拟资产,配置来响应以 elementName
作为根元素的消息,并将响应发送回多响应生成器。一旦获得这些响应,多响应生成器会将它们聚集到一个 XML 文档中,以便在响应中使用。
执行此设置后,您将发现工具列表中的多响应生成器工具可用于附加到消息响应程序。
多响应生成器使用两组主要选项进行控制。Required 部分中的选项是多响应生成器运行所必需的,而 Optional 部分中的选项为高级场景提供了更细粒度的控制。
必须配置以下选项,才能使多响应生成器正常工作。
要发送到后端资产的元素的名称 | XML 元素名称,如果适用,包含命名空间前缀。传入的 XML 中与此名称匹配的元素的每次出现都将被分割并发送到后端资产 URL 中指定的虚拟资产。此外,如果请求中存在多个列表,则此工具将创建所有列表元素的组合。如果要使用单个列表,请排除任何其他列表。 |
---|---|
后端资产 URL | 虚拟资产的 URL。虚拟资产应该有一个响应器来处理 XML 消息,其根元素是要发送到后端资产的元素名中定义的元素。 |
分裂过程不包含的元素 | 以逗号分割的元素名称列表,如果适用,包含命名空间前缀。默认情况下,如果要发送到后端资产选项的元素名称汇总指定的 XML 包含任何具有相同名称的兄弟元素(比如,列表),则多响应生成器将为兄弟元素的每次重复创建一个单独的请求。 |
---|---|
相应类型 | 如果 Backend Asset URL 中指定的虚拟资产返回 XML,则将该字段保留为空。如果 Backend Asset URL 中指定的虚拟资产返回非 XML 格式的负荷,则输入 Other。 |
输出 XML 根标签名称 | 响应 XML 输出的根标签名称。默认为“responses”。 |
输出 XML | 输出 XML 根标签名称的子元素名称。默认为“response”。 |
SOAPAction 列表 | 对于以逗号分割的列表中指定的每个 SOAPAction,要发送给后端资产的元素名称中指定的元素的每次出现都将使用该 SOAPAction 发送到 Backend Asset URL。如果每个元素出现都需要多个响应,则这一点非常有用。 |
多响应生成器可被附加到 Parasoft Virtualize 消息响应程序的任何 XML 输出中。这包含任何基于 XML 的响应程序的 Incoming Request > Payload ,或任何不是基于 XML 的响应程序的 Incoming Request > Payload Converted to XML 。下面描述了使用多响应生成器的基本过程。Example Scenarios中提供了更详细的描述。
虽然有许多场景可以由多个响应生成器处理,但本节将为使用最频繁的场景提供示例。
由多响应生成器处理的最常见场景是包含具有动态元素数量的列表的消息。例如:
<root> <items> <item> <name>Name1</name> <id>1</id> </item> <item> <name>Name2</name> <id>2</id> </item> |
这个请求可以包含 N 子请求,其中 N>=1。我们期望的响应是这样的:
<root> <itemResponses> <itemResponse> <balance>10</balance> </itemResponse> <itemResponse> <balance>20</balance> </itemResponse> |
使用 Usage中描述的流程,下面的说明有助于使用上述请求和响应设置资产。
Example1-Frontend
,然后单击 Next。 item
。http://localhost:9080/Example1-Backend
。itemResponses
。创建后端资产来处理多响应生成器将发送的消息。确保后端资产部署在多响应生成器中的 Backend Asset URL 中指定的 URL 上。
为了简单起见,我们将在后端使用固定响应。然而,从应用商店下载的归档中的 Example1-Backend.pva 使用动态响应。 |
Example1-Backend
,然后单击 Next。 输入以下 XML:
<itemResponse> <balance>10</balance> </itemResponse> |
/*
若要在响应中使用聚合的响应,则双击 Literal Message Responder ,并将以下内容输入至文本字段:
<root> ${responses} </root> |
下图描述了完整的场景: