本主题介绍如何扩展 SOAtest 与 Virtualize 的接口和操作,以覆盖默认情况下不支持的消息格式。章节目录: SOAtest 和 Virtualize 包括允许扩展其内置消息格式的框架。该框架支持您正在使用的任何消息格式。例如,大型机消息格式、二进制消息格式或其他任何类型的私有自定义消息格式。消息格式通过创建本地格式和 XML 之间的转换来定义。该转换允许用户使用可用的富 XML 工具构建和验证消息。这个扩展是使用 Java 完成的。 一旦添加了自定义消息格式,SOAtest 与 Virtualize 将自动生成一个新的客户端或响应器,用于配置和发送使用该格式的请求或响应消息。 您可以将新客户端/响应器实例添加到测试场景或响应器套件中。 有关如何使用的详情,请参阅自定义客户端和自定义消息响应程序。 新的消息格式也将出现在 XML 转换器工具中,该工具在 XML 转换器中有所描述。 除了定义格式之间的一般转换外,还可以选择定义一套指定消息类型,该类型定义该格式中每条消息的确切结构。例如,用户可能将一般 FIX 定义为 XML 转换,然后又定义一套应用程序使用的特定 FIX 消息。每个消息类型结构都由 XML 模式定义,并由 SOAtest 或 Virtualize 扩展提供。 这是一个必须类,用于实现与本机格式和 XML 之间的转换逻辑。这个 对于 toNative,实现者必须处理 对于 toXML,可以选择编写转换,以便自动检测传入的 实现者必须处理 转换期间遇到的错误有两种处理方式。如果错误为致命错误,则必须终止转换,并且应该抛出一个 这些转换是在以下情况下由客户端/响应器和 XML 转换器工具执行的: 在为给定消息格式定义特定的消息类型时,必须为每种消息类型提供 XML 模式。这是可选类,提供一个方法,该方法为给定的特定消息类型提供了 XML 模式。如果没有实现这个类,也不在 parasoft-extension.xml 中引用它,相反,您必须提供对模式文件的引用(查阅下面的定义自定义消息格式的 parasoft-extension.xml)。 此接口有一个方法, 此处 section 元素下的字段 ID 被用于传递到各种 API 方法的 实现 该元素对于此扩展类型是唯一的。要导入自定义消息格式,它必须有效且正确。 id - 消息类型的字符串标识符。在给定消息格式中必须是唯一的。也用于保存客户端/响应器,因此更改它将导致保存的客户端或响应器无法解析正在使用的消息类型。 构建项目(请参阅在 Virtualize 中添加扩展的通用程序或在 SOAtest 中添加扩展的通用程序)并重启 SOAtest 或 Virtualize。 新格式也应该在 XML 转换器的下拉菜单中列出。 在 parasoft-extension.xml 文件中定义的 GUI 字段出现在自定义消息格式客户端/响应器的“转换选项”选项卡中。 如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个设置为密码类型的属性。例如,以下设置 pwd 字段为密码模式: 假设您有自定义消息格式 SimpleMessage,其由键和值对与空格分隔符组成(例如: 一旦将这个自定义格式添加到 SOAtest 中,SOAtest 将能够在 SimpleMessage 和 XML 之间转换。例如,它可以使 转换为/转换自 该项目定义了两种消息类型。 将该示例自定义格式添加到 SOAtest 有两种方法:从 Java 源项目中,您可以从 GitHub 下载,或者从可以从该项目创建的 jar 文件中下载。 若要从 Java 源项目中添加示例格式: 提供 Java 源项目,因此可以查看示例源码。Jar 文件通常是跨团队共享自定义格式的更简单方法。 若要将此示例 Java 项目转换为 jar 文件: 现在,其他团队成员可以从 jar 文件中添加自定义格式(而不是从 Java 项目。如果已经如上所述从 Java 项目中添加了格式,则就不需要完成这些步骤): 一旦示例添加到 SOAtest,那么就可以创建 SimpleMessage 客户端工具也可以使用 XML 转换器工具中的格式。
关于自定义消息格式
实现自定义消息格式的接口
设置好环境后(请参阅添加扩展的通用程序了解在 Virtualize 中操作的说明,或参阅添加扩展的通用程序了解在 SOAtest 中操作的说明),请实现以下接口(在 Extensibility API 文档中有所描述):ICustomXMLConverter 实现
toXML()
方法应以 XML 格式返回消息,而 toNative()
方法应以原生格式返回消息。采取的方法:INativeMessage
或 IXMLMessage
,可用于检索被转换的消息表现形式。IConversionContext
,提供配置设置以及在不同方法之间共享数据的方法。此外,IConversionContext
继承了 ScriptingContext
,这是一个标准的 Parasoft 脚本上下文,允许访问变量、数据源值和设置/获取对象,以便跨工具共享。toXML()
返回 INativeMessage,
而 toNative()
返回 IXMLMessage
。为方便起见,这些接口都有默认实现(DefaultNativeMessage
和 DefaultXMLMessage
)。xmlMessage
参数的消息类型为 {@code null}
的情况。如果正在定义的特定转换不知道如何在不传递特定消息类型的情况下将 XML 转换为本机消息,则应该抛出 {@link CustomConversionException}
。nativeMessage
的消息类型。此自动校测用于确定在从字面量切换为表单视图或在使用通讯报文向导生成资产时的消息类型。如果转换不支持自动检测,那么需要明确选择消息类型,或者 SOAtest/Virtualize 尝试检测消息类型(这在某些情况下可能不正确)。若要支持自动检测,实现者应该忽略传入的 nativeMessage
的消息类型。相反,它们应该自己确定消息类型,并将其设置为返回的 XML 消息。 nativeMessage
参数的消息类型为 {@code null}
的情况,因为这是自动检测支持的确定方式。如果正在定义的特定转换不支持自动检测,因此不知道在不传递特定消息类型的情况下如何进行转换,则应该抛出 {@link CustomConversionException}
。CustomConversionException
异常,其中包含适当的错误消息。如果错误不是致命错误(意味着转换可能继续),则会使用 IConversionContext.report(String message)
报告一则消息,并且方法仍然应该返回(可能部分)
已转换的消息。如果错误是通过抛出异常或调用 report()
报告的,那么它将在客户端/响应器 UI 中作为对话框报告,或者在运行客户端/响应器时作为错误消息报告。ISchemaGenerator 实现
generateSchema()
,接收:IMessageType
,它提供关于要生成 Schema 的消息类型的信息。传入的 IMessageType
实例将包括 parasoft-extension.xml 中定义的消息类型的 id 和名称。ICustomXMLConverterConfiguration
提供对自定义消息格式客户端/响应器的“转换选项”选项卡中值的访问。generateSchema()
返回一个 URI,它是 Schema 文件的引用。它可以是对动态生成的模式的引用、也可以是对 jar 文件中提供自定义消息格式扩展的模式的引用,还可以是对外部资源的引用。如果在生成 Schema 时出现错误,那么可以返回空 URI;这将导致表单输入视图不会针对给定的消息类型正确进行填充。 定义自定义消息格式的 parasoft-extension.xml
实现必要的类后,请使用以下 Schema 定义 parasoft-extension.xml(在 SOAtest 中添加扩展的通用程序和在 Virtualize 中添加扩展的通用程序中有所介绍):<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="urn:ocm/parasoft/extensibility-framework/extension"
type="messageFormat"
name='the name of your message format, appears in menus' description='A more detailed description'>
<class>com.myCompany.MyConverter</class> <!-- implements ICustomXMLConverter -->
<messageFormat xmlns="http://schemas.parasoft.com/extensibility-framework/messageFormat">
<defaultMimeType>text/plain</defaultMimeType>
<messageTypes generatorClass="com.myCompany.SchemaGenerator">
<messageType id='unique ID' name='name' xsd='path to schema in jar'/>
. . .
</messageTypes>
<client icon="myClient.gif" defaultTransport='default transport' />
<responder icon="myResponder.gif" />
</messageFormat>
<version id='your version ID' updaterClass="com.myCompany.myUpdater"/>
<form xmlns="urn:com/parasoft/extensibility-framework/gui">
<section label="field group 1">
<field id="key 1" label="field 1"/>
<field id="key 2" label="field 2"/>
</section>
<section label="field group 2">
<field id="key 3" label="field 3"/>
. . .
</section>
. . .
</form>
</extension>
ICustomXMLConverterConfiguration
实例检索值,该对象允许将用户提供的值传递到实现中。它们还可用于在保存值时,将用户提供的值保存到响应器部署描述符文件中。GUI 中出现的字段标签是基于此 XML 构建的。section 布局不存在编程影响;它只是帮助将各种 GUI 字段整理为不同的部分或分类,以便最终用户方便地访问和使用。 ICustomXMLConverter
的类的完全限定类名以及扩展名被用于识别在客户端/响应器中使用的消息格式。更改保存 .tst 或 .pva 文件后扩展的限定类名或扩展名将阻止已保存的客户端或响应器解析它们正在使用的消息格式。 <MessageFormat> Element
messageTypes
元素,则定义本机格式与没有定义特定消息类型的 XML 之间的一般转换。CSV 就是这种格式的一个例子。ISchemaGenerator
类的完全限定名称。验证新的消息格式
提示
<form xmlns="urn:com/parasoft/extensibility-framework/gui">
<section label="Main Settings">
<field id="usr" label="Username"/>
<field id="pwd" label="Password" type="password"/>
</section>
</form>
示例
key1=value1 key2=value2 key3=value3 key4=value4
)。key1=value1 key2=value2 key3=value3 key4=value4
<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="">
<body>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
<key4>value4</key4>
</body>
</message>
从 Java 源项目中添加格式
创建 Jar 文件
从 Jar 文件中添加格式
在 SOAtest 工具中使用自定义格式
对于 SimpleMessage 客户端,可以使用其中一种消息类型,或者以字面量模式输入自己的键值对。
Overview
Content Tools