Наконец-то я смог решить эту проблему, все это было связано с тем, как создается селектор. Разница была в том, что MQ API имеют идентификатор корреляции в виде байтового массива, где JMS воспринимает его как строку. Из-за этого селектор не смог выбрать сообщение и выбросил опубликованную ошибку. Ошибка совсем не удобна для отладки, поэтому пришлось делать много проб и ошибок. В любом случае, теперь это работает, поэтому я рад. Ниже приведено изменение кода, которое я должен был сделать для этого:
// String selector = "JMSCorrelationID = '" + corleationID + "'"; до изменения
StringBuffer fBuf = new StringBuffer("JMSCorrelationID = 'ID:");
byte[] correlBytes = corleationID.getBytes();
for(int i=0; i<24; i++) {
if (i>=correlBytes.length) {
fBuf.append("00");
} else {
byte b = correlBytes[i];
String hexStr = Integer.toHexString(b);
// -ve values produce 8 char results
if (hexStr.length()>2) hexStr = hexStr.substring(hexStr.length()-2);
// small values produce 1 char results
if (hexStr.length()<2) fBuf.append("0");
fBuf.append(hexStr);
}
}
fBuf.append("'");
String filter = fBuf.toString();
System.out.println("creating receiver with filter: "+filter);
QueueReceiver queueReceiver = queueSession.createReceiver(inQueue,filter);
// QueueReceiver queueReceiver = queueSession.createReceiver (inQueue, селектор);
Передан код из документации IBM.