Я устанавливаю идентификатор корреляции при отправке сообщения в MQ.И мне нужно использовать CorrelationID из COA сообщения, которое я отправил, для дальнейшей обработки.
Я устанавливаю идентификатор корреляции и отправляю сообщение в очередь, используя следующий код.
MQMessage message = createMQMessage("12345");
message.write("Some message to push".getBytes());
queue.put(message);
private MQMessage createMQMessage(String corrID){
MQMessage message = new MQMessage();
message.messageFlags = MQConstants.MQMF_SEGMENTATION_ALLOWED;
if (ackQueueName != null) {
message.messageType = MQConstants.MQMT_REQUEST;
message.replyToQueueManagerName = ackQueueManagerName;
message.replyToQueueName = ackQueueName;
message.report = MQConstants.MQRO_COA | MQConstants.MQRO_COD;
message.correlationId = corrID.getBytes();
}
return message;
}
Я читаю responseQueue из другого приложения, чтобы получить сертификат подлинности и извлечь идентификатор корреляции длядальнейшая обработка.
Но идентификатор корреляции в формате byte[]
, и я использовал приведенный ниже метод getHexString
, чтобы получить строку.Но все, что я получил, - это 48-значный шестнадцатеричный формат моего идентификатора корреляции, такой как
414d5120514d41444556202020202020b5ca0d5b13b3bb20
public static String getHexString(byte[] b) throws Exception {
String result = "";
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return result;
}
Все, что мне нужно, - это метод преобразования 48-значных шестнадцатеричных чисел к исходному идентификатору корреляции, который я установил.Я попытался использовать приведенный ниже метод для преобразования, но он дает мне ненужные данные.
public static String hexStringToByteArray(String hex) {
int l = hex.length();
byte[] data = new byte[l/2];
for (int i = 0; i < l; i += 2) {
data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i+1), 16));
}
return new String(data);
}