将 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)) );
我正在尝试将我的 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)) );