本主题解释如何添加自定义侦听器,使虚拟资产能够通过传输接收和响应消息,此功能默认不支持。本章包含:
关于自定义侦听器
每个虚拟资产的配置面板包含一个 Transports> Custom 选项卡,可以自定义该选项卡来显示消息侦听器实现,以满足组的特定需求。
一旦自定义消息侦听器实现以插入 Virtualize,则虚拟化框架就可以关联并生成响应消息。通过必要协议消息的实际传递和接收由消息侦听器实现来处理。
注意,Parasoft 应用市场(可通过 marketplace.parasoft.com 或贵公司的 CTP 访问)提供了 TCP/IP、FTP 和其他固定长度消息类型(如 Equifax)的示例。
为自定义侦听器实现的接口
如 添加扩展的通用程序中所述将环境设置好后,实现以下接口(Extensibility API 文档中有作说明):
- com.parasoft.api.responder.ICustomMessageListener
- com.parasoft.api.ICustomMessage<T> (or reuse/extend com.parasoft.api.DefaultCustomMessage<T>)
ICustomMessageListener Implementation
这是一个必须类。如果配置已正确配置,则 isReady()
方法应返回 true,如果没有设置所需的设置,应返回 false
。在侦听器应该开始侦听时调用 startup()
方法。这需要:
- 一个配置(从不为空),它为传输实现类提供来自响应程序部署配置 GUI 的值。
- 处理程序 ImessageHandler(从不为空)的实现,可以接受请求消息并返回响应消息。
ICustomMessage
需要实现此接口,以便 IMessageHandler.handleMessage()
实现可以接受该接口的实例。或者,如果您的消息内容格式是用字符串的最好代表,您可以使用默认实现类 DefaultCustomMessage<T>。参数化类型可用于用字符串键控的属性(或头文件)对象类型。
定义自定义监听器的 parasoft-extension.xml
实现必要类之后,如下定义 parasoft-extension.xml (在 添加扩展的通用程序中有所介绍):
<?xml version="1.0" encoding="UTF-8"?> <extension xmlns="urn:com/parasoft/extensibility-framework/extension" type="messageListener" name='The name of your message listener, appears in the transports menu' description='A more detailed description'> <class>com.mycompany.MyMessageListener</class> <!-- implements ICustomMessageListener--> <form xmlns="urn:com/parasoft/extensibility-framework/gui"> <!-- This describes the fields you wish to appear in your transport GUI --> <section label="field group 1"> <field id="key 1" label="field 1"/> <field id="key 2" label="field 2"/> ... <section label="field group 2"> <field id="key 3" label="field 3" /> </section> <section label="field group 2"> <field label="field 1" /> ... </section> ... </form> </extension>
此处 section 元素下的字段 id 被用于传递到各种 API 方法的 ICustomMessageListenerConfiguration 实例检索值,该对象允许将用户提供的值传递到实现中。它们还可用于在保存值时,将用户提供的值保存到响应器部署描述符文件中。GUI 中出现的字段标签是基于此 XML 构建的。section 布局不存在编程影响;它只是帮助将各种 GUI 字段组织成 sections 或 categories,以便最终用户方便地访问和使用。
验证新的监听器
按照 添加扩展的通用程序描述的方式构建项目之后,重启 Virtualize 并验证自定义侦听器名称(如 parasoft-extension.xml
中所指定)是否出现在虚拟资产配置面板的 Transports> Custom 选项卡中(通过双击虚拟资产的 Virtualize 服务器节点打开)。
如果只有一个自定义监听器可用,则这个选项卡将专门用于配置该自定义格式:
如果有多个自定义侦听器可用,则可以从 Select Implementation 下拉菜单选择要使用的:
示例
有几个自定义消息侦听器实现可以在 Parasoft 应用市场上使用(可以在 marketplace.parasoft.com 或从贵公司的 CTP 中访问)。 有关如何安装和使用这些扩展的详细信息,请参阅这些 zip 文件中提供的文档。
提示
- 将提供给扩展 GUI 的值保存为名称-值字符串映射。作为一种结果,重新整理 parasoft-extension.xml 中表单元素的字段将不会影响用户值是否已保存;然后,改变 id 将会影响这一点。id 用于保存或加载值,因此它们必须是唯一的。如果更改它们,则先前保存的配置将不会加载以前的值,并且将变为空。然而,您可以使用修订更新器将用老 id 保存的老设置迁移到新 id 集。
- 仅支持自定义表单 GUI 中带字符串值的 GUI 字段。如果扩展要求 integer 或其他类型,则您可以将字符串内容转换为扩展实现类中的所需类型。
如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个设置为 true 的 password 属性。例如,以下设置 pwd 字段为密码模式:
<form xmlns="urn:com/parasoft/extensibility-framework/gui"> <section label="Main Settings"> <field id="usr" label="Username"/> <field id="pwd" label="Password" password="true"/> </section> </form>
- 表格或列表可以在字符串字段中实现为逗号分隔的值。
- 若要提供与此自定义侦听器相关事件和错误的可见性,可以从 ApplicationContext 调用日志记录(在可扩展性 API 中)。事件可以分类为 INFO、ERROR、WARN 和 DEBUG,这些类别可以在 SOAtest 事件监视器中用作筛选条件。我们建议您直接在传入的上下文中调用 reportEvent 方法(String message, String type),因为这将自动填充事件的源(比如,它来自哪个响应器和 PVA)。