Reputation: 11
I have to get message from one MQ manager (transmission queue), get name of back-end queue from MQXQH header, validate message, create new message without MQXQH header and send it to another MQ manager. Now I can get back-end queue (with XSLT) and send message, but I can't change message, because I can't see data in request. can somebody help me? Current XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:template match="/">
<!-- Get the MQXQH headers -->
<xsl:variable name="MQXQH" select="dp:request-header('MQXQH')" />
<!-- Parse the MQXQH headers to XML format -->
<xsl:variable name="parsedMQXQH" select="dp:parse($MQXQH)" />
<!-- log MQXQH -->
<xsl:message dp:priority="alert">
<xsl:copy-of select="$parsedMQXQH" />
</xsl:message>
<!-- extract destination Queue -->
<xsl:variable name="destQ" select="$parsedMQXQH//RemoteQName"></xsl:variable>
<!-- extract destination Manager -->
<xsl:variable name="destM" select="$parsedMQXQH//RemoteQMgrName"></xsl:variable>
<!-- set destination -->
<dp:set-variable name="'var://service/routing-url'" value="concat('dpmq://KSSH_MQQM_AC/?RequestQueue=',$destQ)" />
</xsl:template>
</xsl:stylesheet>
Upvotes: 1
Views: 1635
Reputation: 21
You could use a MQ header parser, written in JS (https://gitlab.com/ksgerastenok/datapower/-/blob/master/domain/headers.js). It parses MQXQH header with original MQMD header and strips it from the message body.
Next, you should get original MQMD header from MQXQH.MsgDesc
field and set it as MQMD request header. Also, you should set MQOD header with
MQOD.ObjectQMgrName = MQXQH.RemoteQMgrName
MQOD.ObjectName = MQXQH.RemoteQName
At last, you should remove MQXQH header. Now you have original MQMD header and MQOD header with necessary routing information. Routing URL with setted MQOD header can be without Request Queue parameter specified:
dpmq://QMNAME/?RequestQueue=(something that will not be used or leave blank).
Upvotes: 1
Reputation: 181
It is a bad idea to read transmission queue and only possible at all if you tweak your installation. See developerWorks DataPower forum posting on this.
Hermann.
Upvotes: 0