本章包含:
关于自定义报文格式
SOAtest 和 Virtualize 包括允许扩展其内置报文格式的框架。该框架支持您正在使用的任何报文格式。例如,大型机报文格式、二进制报文格式或其他任何类型的私有自定义报文格式。报文格式通过创建本地格式和 XML 之间的转换来定义。该转换允许用户使用可用的富 XML 工具构建和验证报文。这个扩展是使用 Java 完成的。
一旦添加了自定义报文格式,SOAtest 将自动生成一个新的客户机 可用于配置和发送使用此格式请求或响应的消息。您可以将新客户机/响应程序实例添加到测试场景或响应程序套件。
请查阅自定义客户端 以获得关于如何使用它们的更多详情。新的报文格式也将出现在 XML 转换器工具中,该工具在 XML 转换器中有所描述。
除了定义格式之间的一般转换外,还可以选择性地定义一套指定报文类型,该类型定义该格式中每条报文的确切结构。例如,用户可能将一般 FIX 定义为 XML 转换,然后又定义一套应用程序使用的特定 FIX 报文。每个报文类型结构都由 XML 模式定义,并由 SOAtest 或 Virtualize 扩展提供。
实现自定义报文格式的接口
配置环境(添加扩展的通用程序)之后,请实现以下接口(其在 Extensibility API 文档中进行了描述):
- com.parasoft.api.message.ICustomXMLConverter
- com.parasoft.api.message.ISchemaGenerator (optional)
ICustomXMLConverter 实现
这是一个必须类,用于实现与本机格式和 XML 之间的转换逻辑。这个 toXML() 方法应该以 XML 格式返回报文,其中 toNative() 方法应该以其本机格式返回报文。采取的方法:
- INativeMessage 或 IXMLMessage,可用于检索被转换的报文表现形式。
- IConversionContext,提供配置设置以及在不同方法之间共享数据的方法。此外,IConversionContext extends ScriptingContext,这是一个标准的 Parasoft 脚本编制上下文,允许访问变量、数据源值以及工具之间共享的 setting/getting 对象。
toXML() 返回 INativeMessage,而 toNative() 返回 IXMLMessage。这些接口的默认实现可以方便地使用(DefaultNativeMessage 和 DefaultXMLMessage)。
对于 toNative ,实现者必须处理 xmlMessage 参数的消息类型为 {@code null} 的情况。如果正在定义的特定转换不知道如何在不传递特定消息类型的情况下将 XML 转换为本机报文,则应该抛出 {@link CustomConversionException}。
对于 toXML ,转换可能选择性地被编写,以便它可以自动检测传入的 nativeMessage 的消息类型。此自动校测用于确定在从文字切换为表单视图或在使用流量向导生成资产时的消息类型。如果转换不支持自动检测,那么需要明确选择消息类型,或者 SOAtest/Virtualize 尝试检测消息类型(这在某些情况下可能不正确)。若要支持自动检测,实现者应该忽略传入的 nativeMessage 的消息类型。相反,它们应该自己确定消息类型,并将其设置为返回的 XML 消息。
实现者必须处理 nativeMessage 参数的消息类型为 {@code null} 的情况,因为这确定了如何支持自动检测。如果正在定义的特定转换不支持自动检测,因此不知道在不传递特定消息类型的情况下如何进行转换,则应该抛出 {@link CustomConversionException}。
转换期间遇到的Errors 有两种处理方式。如果错误为致命错误,则必须终止转换,并且应该抛出一个 CustomConversionException 异常,其中包含适当的错误消息。如果错误不是致命错误(意味着转换可能继续),则会使用 IConversionContext.report(String message) 报告一则消息,并且方法仍然应该返回(可能部分)已转换的消息。如果错误是通过抛出异常或调用 report() 报告的,那么它将在客户机/响应程序 UI 中作为对话框报告,或者在运行客户机/响应程序时作为错误消息报告。
这些转换是在以下情况下由客户机/响应程序和 XML 转换器工具执行的:
- 在表单和文字视图之间切换
- 从表单输入或表单 XML 视图构建要通过网络发送的消息
- 处理接收的消息
- 执行 XML 转换器工具
ISchemaGenerator 实现
在为给定报文格式定义特定的消息类型时,必须为每种消息类型提供 XML 模式。这是可选类,提供一个方法,该方法为给定的特定消息类型提供了 XML 模式。如果没有实现这个类,也不在 parasoft-extension.xml 中引用它,相反,您必须提供对模式文件的引用(查阅下面的 Defining parasoft-extension.xml for a Custom Message Format )。
此接口有一个方法,generateSchema(),它采用:
- An IMessageType,它提供关于应该为其生成模式的消息类型的信息。传入的 IMessageType 实例将包括 parasoft-extension.xml 中定义的消息类型的 id 和名称。
ICustomXMLConverterConfiguration 提供对自定义报文格式客户机/响应程序的转换选项(Conversion Options)选项卡中值的访问。
generateSchema() 返回一个一个对模式文件的引用的 URI。它可以是对动态生成的模式的引用、也可以是对 jar 文件中提供自定义报文格式扩展的模式的引用,还可以是对外部资源的引用。如果在生成模式中出现错误,那么可以返回空 URI;这将导致表单输入视图没有为给定的消息类型适当填充。
定义自定义报文格式的 parasoft-extension.xml
实现必要类后,定义 parasoft-extension.xml(在下面有所介绍,添加扩展的通用程序)使用以下模式:
<?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>
此处 section 元素下的字段 id 被用于传递到各种 API 方法的 ICustomXMLConverterConfiguration 实例检索值,该对象允许将用户提供的值传递到实现中。它们还可用于在保存值时,将用户提供的值保存到响应器部署描述符文件中。GUI 中出现的字段标签是基于此 XML 构建的。section 布局不存在编程影响;它只是帮助将各种 GUI 字段组织成 sections 或 categories,以便最终用户方便地访问和使用。
实现 ICustomXMLConverter 的类的完全限定类名以及扩展名被用于识别在客户机/响应程序中使用的报文格式。更改保存 .tst 或 .pva 文件后扩展的限定类名或扩展名将阻止已保存的客户机或响应程序解析它们正在使用的报文格式。
<MessageFormat> Element
该元素对于此扩展类型是唯一的。要导入自定义报文格式,它必须有效且正确。
- <defaultMimeType>: 指定报文格式的默认 MIME 类型。此 MIME 类型被用于识别消息包含的信息类型。默认的 MIME 类型被用作发送消息时,报文数据头中的 Content Type。
- <messageTypes>: 这是一个可选的元素,定义一套特定消息类型。如果没有提供 messageTypes 元素,则定义本机格式与没有定义特定消息类型的 XML 之间的一般转换。CSV 就是这种格式的一个例子。
- generatorClass - 一个可选属性,具有实现 ISchemaGenerator 类的完全限定名称。
- <messageType>: 定义自定义报文格式的消息类型。
id - 消息类型的字符串标识符。在给定报文格式中必须是唯一的。也也用于保存客户机/响应程序,因此更改它将导致保存 客户机或响应程序 无法解析正在使用的消息类型。
- name - 用于显示 GUI 中消息类型的名称。
- xsd - 到 xsd 的 URL 路径。如果没有提供生成器类,则要求该属性。否则,直接忽略。
- <client>: 可选元素,其中包含为自定义报文格式生成的自定义 SOAtest 客户机的一些基本信息。
- icon - 可选属性,指定自定义 SOAtest 客户机在 GUI 中显示的图标。这是一个到图标的相对路径,其中包含在 SOAtest 类路径的 jar 文件或 Java 项目中。如果没有提供,那么 SOAtest 将为自定义 SOAtest 客户端使用其默认工具图标。
- defaultTransport - 可选属性;在客户机中使用默认的 SOAtest 传输。可能的值有:
- HTTP 1.0 (默认)
- HTTP 1.1
- JMS
- SonicMQ
- WebSphere MQ
- RMI
- SMTP
- TIBCO
- .NET WCF HTTP
- .NET WCF TCP
验证新的报文格式
构建项目(请查阅添加扩展的通用程序),并且重启SOAtest。Virtualize。
- 验证包含报文格式名称的新客户机/响应程序是否可用于添加到 .tst 或 .pva 文件,其通过选择 Add New> Test or Responder。
新格式也应该在 XML 转换器的下拉菜单中列出。
提示
在 parasoft-extension.xml 文件中定义的 GUI 字段出现在自定义报文格式 client/responder的 Conversion Options 选项卡中。
- 将提供给扩展 GUI 的值保存为名称-值字符串映射。作为一种结果,重新整理 parasoft-extension.xml 中表单元素的字段将不会影响用户值是否已保存;然后,改变 id 将会影响这一点。id 用于保存或加载值,因此它们必须是唯一的。如果更改它们,则先前保存的配置将不会加载以前的值,并且将变为空。然而,您可以使用修订更新器将用老 id 保存的老设置迁移到新 id 集。
- 仅支持自定义表单 GUI 中带字符串值的 GUI 字段。如果扩展要求 integer 或其他类型,则您可以将字符串内容转换为扩展实现类中的所需类型。
如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个设置为密码类型的属性。例如,以下设置 pwd 字段为密码模式:
<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>
- 表格或列表可以在字符串字段中实现为逗号分隔的值。
例如
假设您有自定义报文格式 SimpleMessage,其由键和值对与空格分隔符组成(例如: key1=value1 key2=value2 key3=value3 key4=value4
)。
一旦将这个自定义格式添加到 SOAtest 中,SOAtest 将可能在 SimpleMessage 和 XML 之间转换。例如,它可以将
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>
该项目定义了两种消息类型。
- NameSchema: 包含两个键值对,其中键为 FirstName 和 LastName。
- SimpleSchema: 包含上面引用的四个键值对。
将该示例自定义格式添加到 SOAtest 有两种方法:从 Java 源项目中,您可以从 Parasoft 应用商店下载,或者从可以从该项目创建的 jar 文件中下载。
从 Java 源项目中添加格式
若要从 Java 源项目中添加示例格式:
- 从 http://marketplace.parasoft.com 中下载 SimpleMessage.zip 文件,并提取它。
- 将提取到的文件作为 Java 项目导入工作空间。
- 在 SOAtest 透视图中,选择 Parasoft> Preference,选择 System Properties ,单击 Add Java Project ,指明示例 Java 项目的位置,然后单击 Apply。
- 重启 SOAtest
创建 Jar 文件
提供 Java 源项目,因此可以查看示例源码。Jar 文件通常是跨团队共享自定义格式的更简单方法。
若要将此示例 Java 项目转换为 jar 文件:
- 在 Java 透视图中,右键单击 Java 项目,然后选择 Export。
- 选择 Java> JAR file,然后单击 Next。
- 指明希望在何处创建 jar 文件,然后单击 Finish。
从 Jar 文件中添加格式
现在,其他团队成员可以从 jar 文件中添加自定义格式(而不是从 Java 项目。如果已经如上所述从 Java 项目中添加了格式,则就不需要完成这些步骤):
- 在 SOAtest 透视图中,选择 Parasoft> Preference,选择 System Properties ,单击 Add JARs ,指明示例 jar 文件的位置,然后单击 Apply。
- 重启 SOAtest
在 SOAtest 工具中使用自定义格式
一旦示例添加到 SOAtest,那么就可以创建 SimpleMessage 客户机工具也可以使用 XML 转换器工具中的格式。
对于 SimpleMessage 客户机,可以使用其中一种消息类型,或者以文字模式输入自己的键值对。