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)