本主题介绍如何添加自定义监听器,使虚拟资产能够通过默认不支持的传输方式接收和响应消息。章节目录:

关于自定义监听器

每个虚拟资产的配置面板包含一个传输> 自定义选项卡,可以自定义该选项卡来显示消息监听器实现,以满足组的特定需求。 

将自定义消息监听器实现添加到 Virtualize 中后,虚拟化框架即可关联并生成响应消息。通过必要协议消息的实际传递和接收由消息监听器实现来处理。

注意,Parasoft Marketplace(可通过客户门户或您组织的 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 所指定)是否出现在虚拟资产配置面板的传输> 自定义选项卡中(通过双击虚拟资产的 Virtualize 服务器节点打开)。

如果只有一个自定义监听器可用,则这个选项卡将专门用于配置该自定义格式:

如果有多个自定义监听器可用,则可以从选择实现菜单选择要使用的监听器:

示例

GitHub 中提供了一个自定义消息监听器实现的示例。要使用监听器,请将 jar 添加到系统首选项 classpath 列表中,然后创建一个新的 pva 文件,并为虚拟资产部署上的监听器配置端口。

提示

  • 将提供给扩展 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)。
  • No labels