默认情况下,使用 WebSphere MQ 配置部署的资产将 MQMD characterSet、messageId 和 correlationId 从传入的请求 MQ 消息中拷贝到输出的响应 MQ 消息。这是默认关联机制。
如果要求不同的关联机制(如让虚拟资产拷贝传入的请求 messageId 到输出的响应 correlationId 中),则您可以在消息响应程序级别上对它进行配置。为此:
注意,为了让值在数据库和通讯报文视图中具有可读性,Virtualize 将显示字节数组字段的十六进制编码表示。然而,实际的字节内容将从请求正确地传输到响应消息,以此保护原始字节内容。
对于使用自定义消息格式的 MQ 消息,如果 RFH2 头文件没有明确保留在自定义消息转换器中,则无法在以响应器关联为目的的 XML 消息中对其访问。如果响应器关联需要 RFH2 头文件,则可以通过自定义脚本上下文以 XML 格式的消息字符串的一部分访问它们。
以下 Jython 脚本提供如何实现此任务的示例。它测试请求以查看消息域是否设置为 sampleDomain
,以及应用程序为 sampleKey
定义的属性是否设置为 sampleValue
。
from com.parasoft.api import CorrelationScriptingHookConstants from com.parasoft.xml import XMLUtil from org.w3c.dom import * from javax.xml.xpath import * from java.lang import * def match(context): msg = context.get(CorrelationScriptingHookConstants.MESSAGE_STR) if msg != None: xmlDocument = XMLUtil.buildDocumentFromString(msg) cond1 = matchRFH2Header(xmlDocument, "mcd/Msd", "sampleDomain") cond2 = matchRFH2Header(xmlDocument, "usr/sampleKey", "sampleValue") return cond1 and cond2 return false def matchRFH2Header(xmlDocument, path, val): xPathFactory = XPathFactory.newInstance(); xpath = xPathFactory.newXPath() expression = xpath.compile("/RFH2Message/RFH2Headers/" + path + "/text()") elementValue = expression.evaluate(xmlDocument) return String(elementValue).equals(val) |
以下路径可用于访问不同 RFH2 区域的值:
消息内容说明符
发布命令和订阅命令
应用程序定义的属性
Java 消息传递服务
有关使用脚本关联的详情,请查阅 Custom Correlation。
如果消息没有正确关联,则会生成错误消息,或不会响应给消息,检查报头中指示的编码与消息正文中实际使用的编码是否不匹配。如果发生该情况,则您需要使用 JRE 系统属性覆盖预期的消息格式。
例如,如果您的报头指示 characterSet=37,而实际消息以 UTF-8 格式编码,则您便使用以下 JRE 系统属性:
mq.force.utf8.encoding=true
通过使用属性名后的 -J-D
启动 Virtualize。例如:
virtualize.exe -J-Dmq.force.utf8.encoding=true
相关属性, mq.force.custom.encoding=UTF-8
,在查看或使用自定义消息格式时(本机 MQ 消息内容和 XML 转换时)应用到 MQ 记录向导。.