Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-4976

ConsumeJMS occasionally failing when reading TextMessage from IBM MQ

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.6.0
    • Component/s: Extensions
    • Labels:
      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

            Activity

              People

              • Assignee:
                markap14 Mark Payne
                Reporter:
                markap14 Mark Payne
              • Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: