Eugene K.
Eugene K.

Reputation: 11

IBM Datapower - WebSphere MQ - message from transmission queue

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

Answers (2)

zortech
zortech

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

HermannSW
HermannSW

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

Related Questions