将 HEX 字符串设置为 MQ Correlation ID

Set HEX string as MQ Correlation ID

我正在尝试将我的 MQ 消息的相关 ID 设置为此十六进制数: correlationID = "414d51205350434954495f5550493032115bf458a7180410" 它最初作为字符串传递给函数

        MQMessage msg = new MQMessage();
        byte[] corrID = null;
        corrID = Base64.getDecoder().decode(correlationID);
        try 
        {    
            msg.writeString(message);   
            msg.correlationId = corrID;
            queue_con.put(msg,pmo);
            corrID = msg.correlationId;
            System.out.println(corrID);
            System.out.println(Base64.getEncoder().encodeToString(corrID));

        } 

这是48位长。我读到 CorrelationID 字段可以容纳 24 个字节/48 个十六进制数字。但是当我尝试设置 msg.correlationId 字段时,该数字被截断为仅 32 位数字。你能帮我解决这个问题吗?

这就是我所做的并且有效:

MQMessage msg = new MQMessage();
        int len = correlationID.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(correlationID.charAt(i), 
16) << 4)
                                 + 
Character.digit(correlationID.charAt(i+1), 16));
        }
        byte[] corrID = data;
        try 
        {
            msg.writeString(message);   
            msg.correlationId = corrID;
            queue_con.put(msg,pmo);
        }

使用 JRE17 的 XML 框架部分:

try {
 msg.correlationId = javax.xml.bind.DatatypeConverter.parseHexBinary(correlationID);
} catch (IllegalArgumentException e) {
 msg.correlationId = correlationID.getBytes();
}

对于那些试图从纯 jms 做同样事情的人:

javax.jms.Message message...
message.setJMSCorrelationIDAsBytes(javax.xml.bind.DatatypeConverter.parseHexBinary(new String(value)) );