Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
When reading from IBM MQ we will occasionally encounter a stack trace like the following:
2018-02-27 11:26:53,138 WARN [Timer-Driven Process Thread-186] o.a.n.c.t.ContinuallyRunProcessorTask org.apache.nifi.jms.processors.MessageBodyToBytesConverter$MessageConversionException: Failed to convert BytesMessage to byte[] at org.apache.nifi.jms.processors.MessageBodyToBytesConverter.toBytes(MessageBodyToBytesConverter.java:42) at org.apache.nifi.jms.processors.JMSConsumer$1.doInJms(JMSConsumer.java:84) at org.apache.nifi.jms.processors.JMSConsumer$1.doInJms(JMSConsumer.java:65) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494) at org.apache.nifi.jms.processors.JMSConsumer.consume(JMSConsumer.java:65) at org.apache.nifi.jms.processors.ConsumeJMS.rendezvousWithJms(ConsumeJMS.java:119) at org.apache.nifi.jms.processors.AbstractJMSProcessor.onTrigger(AbstractJMSProcessor.java:136) at org.apache.nifi.jms.processors.ConsumeJMS.onTrigger(ConsumeJMS.java:57) at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1118) at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147) at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:132) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: com.ibm.msg.client.jms.DetailedJMSException: JMSCMQ1049: The character set '1208(UTF-8) Unmappable Action: REPORT Unmappable Replacement: 63' cannot convert some or all of the string '[B@14c194bd' at sun.reflect.GeneratedConstructorAccessor1012.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319) at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226) at com.ibm.msg.client.wmq.common.internal.WMQUtils.computeTextFromBytes(WMQUtils.java:382) at com.ibm.msg.client.wmq.common.internal.WMQUtils.computeTextFromByteBuffer(WMQUtils.java:421) at com.ibm.msg.client.wmq.common.internal.messages.WMQTextMessage.getText(WMQTextMessage.java:240) at com.ibm.msg.client.jms.internal.JmsTextMessageImpl.getText(JmsTextMessageImpl.java:205) at com.ibm.jms.JMSTextMessage.getText(JMSTextMessage.java:124) at org.apache.nifi.jms.processors.MessageBodyToBytesConverter.toBytes(MessageBodyToBytesConverter.java:40) ... 19 common frames omitted Caused by: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:281) at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:816) at com.ibm.mq.jmqi.system.JmqiCodepage.bytesToString(JmqiCodepage.java:690) at com.ibm.msg.client.wmq.common.internal.WMQUtils.computeTextFromBytes(WMQUtils.java:375) ... 24 common frames omitted
Unfortunately, if using Client Acknowledge, we end up not acknowledging the message, since we can't read it, so it stays on the queue, and we constantly attempt to pull it again, causing the processor to essentially become 'stuck'.
If such an issue arises, where we cannot retrieve the content of the message, we are better off to log an ERROR with the stack trace and then acknowledge the message even without the content.
Attachments
Issue Links
- links to