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)

Reply via email to