题
现在已经遇到了几个小时的问题,有人有什么想法吗?
java.lang.nosuchmethoderror:com.ibm.mq.mqexception。 。 ) at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal(WMQSyncConsumerShadow.java:233) at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:922) at com. ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:450) at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:742) at com.ibm.msg.客户端。
当我使用MQ本机库输入消息时,我会遇到此错误,并使用JMS API读取它们。 JMS读取未能抛出上面的异常。我还使用JMS选择器,这似乎正在引起问题。在选择者的情况下,一切正常。 tia。
解决方案
最后,我能够解决这个问题,这与选择器的创建方式有关。不同之处在于,MQ API的相关ID为字节数组,当JMS将其作为字符串中。因此,选择器无法选择消息,并且正在丢弃发布的错误。错误根本不是友好型友好的,因此必须进行很多反复试验。无论如何,这都可以正常工作,所以我很高兴。以下是我必须为此做的代码更改:
//字符串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.CreateCeiver(inqueue,selector);
从IBM文档转介代码。
其他提示
您的MQ库版本错误。尝试根据最新版本运行代码。