Every time I work with MQ and Spring JMS I want to poke my eyes out with a dull instrument. It’s always a pain in the neck. My most recent challenge was trying to get the JMSXUserID field to flow through to the application on the other side of MQ.
First, I created a MessagePostProcessor to add the JMS header
public class MyMessagePostProcessor implements MessagePostProcessor
{
private String userId;
@Override
public Message postProcessMessage(Message msg) throws JMSException
{
msg.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER, userId);
msg.setStringProperty("JMSXUserID", userId);
return msg;
}
}
But when I checked the queue with HermesJMS I could see that the JMSXUserID had been overwritten somewhere, so I fired up WireShark and watched for the message and confirmed that the message that was going over the wire already had the JMSXUserID field overwritten. This was a good thing - the issue was in the IBM MQ JMS client code.
[Read More]