Mark Payne created NIFI-4976: -------------------------------- Summary: ConsumeJMS occasionally failing when reading TextMessage from IBM MQ Key: NIFI-4976 URL: https://issues.apache.org/jira/browse/NIFI-4976 Project: Apache NiFi Issue Type: Bug Components: Extensions Reporter: Mark Payne Assignee: Mark Payne
When reading from IBM MQ we will occasionally encounter a stack trace like the following: {code:java} 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{code} 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. -- This message was sent by Atlassian JIRA (v7.6.3#76005)