本节介绍如何设置 SOAtest 与 Virtualize 以访问 IBM MQ。通过配置 Parasoft 工具可以实现对 IBM MQ 的访问。章节目录: IBM WebSphere MQ Java API 与标准 JMS API 相比 该部分涉及通过 IBM WebSphere MQ Java API 而非标准 JMS API 进行测试的服务。如果要使用 JMS API 发送和接收 IBM WebSphere MQ 的消息,请选择 JMS 传输选项,并参考 JMS。 使用 MQ 选项,必须添加 WebSphere MQ 客户端或服务器安装的 jar 文件。MQ 客户端可以在 http://www.ibm.com/software/integration/wmq/clients/处进行下载。 针对 WebSphere MQ 9,所需 jar 是: 针对 WebSphere MQ 8,所需 jar 是: 针对 WebSphere MQ 7,所需 jar 有: 针对所有版本,这些 jar 文件都可在 若要将这些 jar 文件添加到 SOAtest 或 Virtualize 的 classpath 下,请完成以下操作: IBM Java Runtime 使用的 CipherSuite 名称与 SOAtest 和 Virtualize 附带的 Java Runtime 不同。 要使用与产品一起安装的 Java,请设置以下 JVM 属性: 或者,您也可以使用 IBM JDK。IBM Java 在以下网页可用: https://www.ibm.com/developerworks/java/jdk/如果配置 SOAtest 与 Virtualize 使用 IBM JDK,请参阅配置 Java 运行时了解详情。 从相应工具传输选项卡内的传输菜单选择 WebSphere MQ,将在左窗格显示以下选项: 指定 MQ 连接设置时,可以在以下模式中进行选择: 如果使用默认模式,请填写以下字段: 选项 说明 如果使用 CCDT 模式,请填写以下字段: 选项 说明 如果使用绑定模式,请填写以下字段: 选项 说明 启用执行授权选项并输入用户名和密码以验证请求。如果未使用正确的用户名和密码,则不会对请求进行身份验证。 启用保持连接,使测试保持与队列管理器的连接,这样就可以在后续测试中使用 MQ 浏览游标。如果禁用,运行此测试后将关闭与队列管理器的连接;任何后续测试都将打开新的连接。默认启用。 消息交换模式有以下可用选项: 期望同步响应:指定 SOAtest 或 Virtualize 是否接收响应。如果选择期望同步响应,SOAtest 或 Virtualize 发送消息并接收响应。如果不选择期望同步响应,SOAtest 或 Virtualize 只发送消息不接收响应。 该部分允许配置 MQRFH2 头,它用于将消息传递到属于 WebSphere Message Broker 的消息代理或从消息代理传递消息(在 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06920_.htm 中说明)。 在 MQRFH2 头部分可以配置请求消息头的不同部分,然后 SOAtest 或 Virtualize 将基于指定设置创建头“文件夹”。 发布/订阅命令:此面板用于配置 <psc> (发布/订阅命令) 文件夹。<psc> 文件夹用于将发布/订阅命令消息传达给代理。NameValueData 字段中只允许一个 psc 文件夹。完整信息,请参阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06950_.htm (命令消息)。 关于 JMS 消息的更多信息,请参阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/ac24863_.htm。 MQRFH2 Get 消息选项:此面板用于控制将 MQRFH2 头转换为 XML 格式用于 Get 消息选项。如果启用此选项,响应消息的 MQRFH2 头将转换为可读的 XML 格式。您可以应用 XML 输出工具(例如 XML 数据库、XML 转换程序)。如果没有启用此选项,响应消息的 MQRFH2 头可能包含不可见的字符。 Put 消息具有以下选项: MQOO_PASS_IDENTITY_CONTEXT:当消息放入队列时,允许在 PutMsgOpts 参数中指定 MQPMO_PASS_IDENTITY_CONTEXT 选项。这为消息提供了使用 MQOO_SAVE_ALL_CONTEXT 选项打开的输入队列中的身份上下文信息。必须指定 MQOO_OUTPUT 选项。 MQOO_SET_IDENTITY_CONTEXT:当消息放入队列时,允许在 PutMsgOpts 参数中 MQPMO_SET_IDENTITY_CONTEXT 选项。这为消息提供了在 MQPUT() 或 MQPUT1 调用上指定的 MsgDesc 参数中包含的身份上下文信息。此选项意味着 MQOO_PASS_IDENTITY_CONTEXT,因此无需指定。必须指定 MQOO_OUTPUT 选项。 MQMD.report:关于其他消息的报告消息。此字段允许 SOAtest & Virtualize 发送原始信息,以指定需要哪些报告或响应消息,并且在报告和信息中是否包含应用程序信息数据,以及该如何设置报告中的消息和关联 ID 或回复。它包含一个或多个 MQC 类常量。 可以从以下各项中选择一种: MQRO_EXCEPTION_WITH_DATA:这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。 MQRO_EXPIRATION_WITH_DATA:这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。 MQRO_EXPIRATION_WITH_FULL_DATA:这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。 GET 消息具有以下可用选项: MQGetMessageOptions.options:用于控制由 SOAtest & Virtualize 内部调用 MQQueue.get() 操作的选项。 可以指定以下任一值或不指定任何值。 MQGMO_WAIT:SOAtest 或 Virtualize 等到合适的消息到达为止。最大等待时间在 WaitInterval 中指定。 MQGMO_NO_WAIT:SOAtest 或 Virtualize 在没有可用的合适消息时不需等待。这与 MQGMO_WAIT 选项相反,并且已定义为辅助程序文档。 MQGMO_BROWSE_FIRST:当使用 MQOO_BROWSE 选项打开队列时,将建立浏览游标,该游标在逻辑上位于队列中的第一条消息之前。然后使用 MQGET 调用指定 MQGMO_BROWSE_FIRST、MQGMO_BROWSE_NEXT 或 MQGMO_BROWSE_MSG_UNDER_CURSOR 选项无破坏地从队列中检索信息。浏览光标标记队列上消息的位置,下一个使用 MQGMO_BROWSE_NEXT 的 MQGET 调用从该位置搜索合适的消息。 MQGMO_BROWSE_NEXT:将浏览光标前进到满足 MQGET 调用中指定的选择标准的队列中的下一条消息。该消息返回到 SOAtest 或 Virtualize,但仍保留在队列中。打开队列进行浏览后,无论它指定了 MQGMO_BROWSE_FIRST 还是 MQGMO_BROWSE_NEXT 选项,使用该句柄的第一个浏览调用都具有相同的效果。 MQGMO_MSG_UNDER_CURSOR:不管 MQGMO 中的 MatchOptions 字段是否指定了 MQMO)* 选项,都将检索浏览光标所指向的消息。消息将从队列中移除。浏览光标所指向的消息是最后使用 MQGMO_BROWSE_FIRST 或 MQGMO_BROWSE_NEXT 选项检索到的消息。 MQGMO_UNLOCK:解锁消息。要解锁的消息事先已通过使用 MQGMO_LOCK 选项的 MQGET 调用锁定。如果没有为此句柄锁定的消息,则调用以 MQRC_NO_MSG_LOCKED 完成。 MQGMO_CONVERT:请求转换 SOAtest 或 Virtualize 数据。在将数据复制到消息缓冲区之前,该转换遵循 MQMessage 的 characterSet 和 encoding 属性。 MQOO_BROWSE:打开浏览消息的队列。将打开该队列,以用于具有其中一项以下选项的后续 MQGET 调用:MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT 和 MQGMO_BROWSE_MSG_UNDER_CURSOR。即使队列当前已为 MQOO_INPUT_EXCLUSIVE 打开,也允许这样做。带有 MQOO_BROWSE 选项的 MQOPEN 调用将建立一个浏览游标,并将其逻辑上放在队列中的第一条消息之前。 MQOO_ALTERNATE_USER_AUTHORITY:ObjDesc 参数中的 AlternateUserId 包含用来验证 MQOPEN 调用的用户识别符。不管是否授权运行 SOAtest 或 Virtualize 的用户标识符,只要授权了 AlternateUserId 使用指定访问选项打开对象,那便可成功调用。 队列管理器选项具有以下可用选项: MQCNO_FASTPATH_BINDING:该选项会造成 SOAtest 或 Virtualize 和本地队列管理器代理属于同一执行单元。这与绑定的常规方法相反,SOAtest 或 Virtualize 和本地队列管理器代理在单独的执行单元中运行。 MQCNO_STANDARD_BINDING:该连接选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性,也就是说,保护队列管理器免受错误程序的影响。 MQCNO_SHARED_BINDING:该连接选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性。也就是说,它保护队列管理器免受错误程序的影响。然而,一些资源仍在 SOAtest 或 Virtualize 以及本地队列管理器代理之间共享。 MQCNO_ISOLATED_BINDING:该选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性,也就是说,保护队列管理器免受错误程序的影响。SOAtest 或 Virtualize 进程以及本地队列管理器代理彼此隔离,因为它们不共享资源。 MQ 队列管理器属性具有以下可用选项: MQC.CCSID_PROPERTY:该选项配置客户端使用的 CCSID。当以绑定模式直接连接至 WebSphere MQ 时,不会应用此选项。 可以配置以下 SSL 设置。 CipherSuite 用于指定 MQ 通道上的 SSL 连接。请参阅 IBM MQ 文档,以确定根据 CipherSpec 选择哪个 CipherSuite。 可以从下拉菜单中指定固定的 CipherSuite 或输入一个参数化变量以基于通讯报文指定 CipherSuite。 (可选项)指定对等名称验证队列管理器提供的证书是否与对等名称参数指定的条件匹配。服务器验证将此参数与队列管理器提供的证书的 DN(可分辨名称)相匹配。 可以指定固定的对等名称或输入一个参数化变量以基于通讯报文指定对等名称。 该设置指定用于客户端 SSL(队列管理器对客户端进行身份验证)的密钥库的位置。可以在 Parasoft> 首选项下将工具配置为对所有项目使用密钥库配置(请参阅安全设置)或者,您可以添加套件级全局设置属性,并配置套件中所有工具可用的密钥库设置。 更多详情,请参阅添加全局测试组件属性(SOAtest)或添加全局属性(Virtualize)。 如果 MQ 通道不要求客户端对其进行身份验证,则不需要提供密钥库。 指定要用于服务器端 SSL(客户端对队列管理器进行身份验证)的信任库。可以在 Parasoft> 首选项下将工具配置为对所有项目使用信任库配置(请参阅安全设置)或者,您可以添加套件级全局设置属性,并配置套件中所有工具可用的信任库设置。 更多详情,请参阅添加全局测试组件属性(SOAtest)或添加全局属性(Virtualize)。通过指定 CipherSuite 并运行该工具尝试 SSL 连接后,将无法更改信任库、密钥库和密钥库密码。如果发生更改,则需要重新启动 SOAtest 或 Virtualize 才能使更改生效。 若要使用密钥库,则需下载并安装无限强度的 Java 加密扩展。详情请参阅 JCE 前提条件。 脚本挂钩选项允许您使用脚本语言(如 Jython、Java、Groovy 和 JavaScript)自定义 MQ 属性。 如果需要有关使用脚本实用程序的更多信息,请参阅本教程的脚本部分。有关脚本 API 的列表,请前往帮助 > 帮助内容或 Parasoft > 帮助(取决于您的安装程序),然后查找标题为“Parasoft SOAtest Extensibility API”(适用于 SOAtest)或“Parasoft Virtualize Extensibility API”(适用于 Virtualize)的手册。 以下是脚本访问密钥: 例如,如果您将 put 消息的有效时间设置为 999: 使用上述脚本运行工具之后,请注意通讯报文头中的 Expiry 字段会变成 999。 注意:Add MQ Hook 选项卡中设置的所有选项都可以覆盖并优先于其他选项卡中设置的任何选项。 发生故障时,MQ 返回失败的原因代码。为了方便用户理解,SOAtest & Virtualize 错误消息会报告这些相同的原因代码。 有关 MQ 原因代码及其含义的列表信息,请通过链接到 http://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.tro.doc/q040710_.htm 查阅 IBM Knowledge Center。 以下是使用客户端工具(例如,SOAP 客户端、REST 客户端、消息传送客户端等)发送和接收字符数据的最佳实践。 在发送字符数据(如 XML、CSV、定长或纯文本)时,格式类型必须设置为 MQFMT_STRING 常量的值,即“MQSTR”。 对于 SOAP 客户端工具,用于对请求进行编码的字符集是通过工具混合选项卡中的输出消息编码选项指定的。 其他适用工具(例如:REST 客户端、消息传送客户端)使用产品的 Misc 首选项中配置的字符编码。 适用选项有: 如果指定不同的编码,则 MQ 消息的字符集将默认为 MQCCSI_Q_MGR,它指的是“消息中的字符数据是队列管理器字符集中的消息。" 应该在客户端工具 MQGetMessageOptions(在传输选项卡中)下启用 MQGMO_CONVERT 框。 这将指示队列管理员将消息转换为客户端工具的字符集。如果消息的原始字符集不是客户端(IBM_037、IBM_437 等)支持的功能之一,这该一点很重要。 将用来执行转换的字符集配置为与 put 消息(如上所述)相同。将必要的 jar 文件添加到 classpath
com.ibm.mq.allclient.jar
com.ibm.mq.allclient.jar
com.ibm.mq.jar
com.ibm.mq.jmqi.jar
com.ibm.mq.headers.jar
com.ibm.mq.pcf.jar
com.ibm.mq.commonservices.jar
connector.jar
针对 WebSphere MQ 6 及其更早版本,所需 jar 有:
com.ibm.mq.jar
connector.jar
[WebSphere MQ Installation directory]/java/lib
中找到。Java 运行时
-J-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
配置 MQ 选项
MQ 地址
主机 指定运行 IBM MQ 的主机名。 端口 指定运行 IBM MQ 的端口(默认为 1414)。 通道 指定服务端定义的通道的名称。 队列管理器 指定队列管理器的名称。 Put 队列 指定发送消息的队列。 Get 队列 指定接收消息的队列。 CCDT 文件 指定 CCDT 文件的位置(扩展名为 .tab)。 队列管理器 指定队列管理器的名称。 Put 队列 指定发送消息的队列。 Get 队列 指定接收消息的队列。 队列管理器 指定队列管理器的名称。 Put 队列 指定发送消息的队列。 Get 队列 指定接收消息的队列。 身份验证
可选参数
消息交换模式
MQRFH2 头
Put 消息
MQQueue.put()
的行为。可以指定以下任一值或不指定任何值。
可以指定如何为报告或回复消息生成消息 ID:
可以指定其中一项以下选项来控制如何设置报告或回复消息的关联性 ID:
可以指定其中一项以下选项来控制当原始消息无法传递到目标队列时,控制其处理:Get 消息
队列管理器选项
MQ 队列管理器属性
更改此值会影响连接到 WebSphere MQ 头中转换信息的队列管理器的方式。除了 MQMessage.applicationIdData 和 MQMessage.putApplicationName 字段中的数据,WebSphere MQ 头中的所有数据都来自 ASCII 代码集的不变量部分,
如果避免使用这两个字段 ASCII 代码集的变量部分的字符,则可以将 CCSID 从 819 更改为任何其他 ASCII 代码集。如果将其更改为与正在连接的队列管理器的客户端 CCSID 相同,则您在队列管理器上获得性能优势,因为它不会尝试转换消息头。如果 CCSID 字段中没有提供值,则 SOAtest 或 Virtualize 将提供默认值 1208(UTF-8)。SSL
CipherSuite
对等名称
密钥库
信任库
脚本挂钩
from com.ibm.mq import *
def changeExpiry(context):
putMessage = context.get("mqPutMessage")
putMessage.expiry = 999
解释 WebSphere MQ 错误消息
发送和接收数据 - 最佳实践
Put 消息
Get 消息
Overview
Content Tools