IBM Support

IV88861: WMQ-JMS CANNOT CONSUME MESSAGES ENCODED WITH CHARACTER ENCODING CCSID '1201'

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • The WebSphere MQ Resource Adapter v7.0.1.12 as used within
    WebSphere Application Server v8.0.0.10 is unable unable to
    consume messages from an MQ queue which are declared to have a
    Coded Character Set Identifier (CCSID) value of '1201'.
    
    The error message reported changes, depending upon if there is a
    BOQUEUE defined or not for the queue.
    
    If there is a BOQUEUE defined on the queue:
    The messages are moved to the BOQUEUE silently when the JMS
    application attempts to consume a message, and there are no
    error messages output.  The JMS method call:
    
      javax.jms.MessageConsumer.receiveNoWait(long timeout)
    
    will return a 'null' value at the end of the timeout time if
    there are no other messages available to consume on the queue.
    
    
    If the BOQUEUE is not defined on the queue:
    An JMSException is thrown when the application attempts to
    consume a message from the queue, with the following exception
    stack:
    
    com.ibm.msg.client.jms.DetailedJMSException:
    JMSWMQ1080: No Backout-Requeue queue defined.
    sun.reflect.NativeConstructorAccessorImpl.newInstance0
    sun.reflect.NativeConstructorAccessorImpl.newInstance
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance
    java.lang.reflect.Constructor.newInstance
    com.ibm.msg.client.commonservices.j2se.NLSServices.createExcepti
    on
    com.ibm.msg.client.commonservices.nls.NLSServices.createExceptio
    n
    com.ibm.msg.client.wmq.internal.WMQPoison.deadletter
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg
    com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInt
    ernal
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive
    com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveIn
    boundMessage
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive
    com.ibm.mq.jms.MQMessageConsumer.receive
    HandlingCcsid1201Test.jmsGetMessage
    HandlingCcsid1201Test.runTest
    HandlingCcsid1201Test.main
    
    Caused by: com.ibm.msg.client.jms.DetailedJMSException:
    JMSWMQ1079: Unable to write a message to dead letter queue.
    WebSphere MQ classes for JMS failed to requeue a message to the
    dead letter queue.
    Use the linked exception to determine the cause of this error.
    If there is no linked exception, check that the queue manager
    has a defined a dead letter queue. Once WebSphere MQ classes for
    JMS has sent a message to the dead letter queue, the reason code
    stored in the message's MQDLH can be used to determine why the
    message was sent there.
    sun.reflect.NativeConstructorAccessorImpl.newInstance0
    sun.reflect.NativeConstructorAccessorImpl.newInstance
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance
    java.lang.reflect.Constructor.newInstance
    com.ibm.msg.client.commonservices.j2se.NLSServices.createExcepti
    on
    com.ibm.msg.client.commonservices.nls.NLSServices.createExceptio
    n
    com.ibm.msg.client.wmq.internal.WMQPoison.deadletter
    ... 13 more
    Caused by: java.lang.NullPointerException
    com.ibm.mq.jmqi.internal.JmqiDC.writeMQField
    com.ibm.mq.jmqi.internal.JmqiDC.writeMQField
    com.ibm.mq.jmqi.MQDLH.writeToBuffer
    com.ibm.mq.jmqi.internal.AbstractMqiStructure.writeToBuffer
    com.ibm.msg.client.wmq.internal.WMQPoison$PoisonMessage.chainInD
    LH
    com.ibm.msg.client.wmq.internal.WMQPoison$PoisonMessage.access$1
    400
    com.ibm.msg.client.wmq.internal.WMQPoison.deadletter
    

Local fix

Problem summary

  • ****************************************************************
    USERS AFFECTED:
    Users of the WebSphere MQ classes for JMS who are consuming
    messages from an MQ queue or topic, where the message contains
    character data which is declared to be encoded in CCSID 1201.
    
    This includes users of the WebSphere MQ Resource Adapter.
    
    
    Platforms affected:
    MultiPlatform
    
    ****************************************************************
    PROBLEM DESCRIPTION:
    The WebSphere MQ classes for JMS did not contain support to map
    the CCSID value '1201' to a corresponding Java
    "java.nio.charset.Charset" name.  The consequence of this with
    respect to a JMS application attempting to consume a message
    which was declared to contain character data encoded in the
    CCSID '1201' on the queue or topic depended upon several
    factors, including:
    
    (a) Was a backout queue defined on it (BOQUEUE)?
    
    (b) Which version of the WebSphere MQ classes for JMS were being
    utilised?
    
    
    For example, if using the WebSphere MQ classes for JMS v7.0 to
    consume the message from a queue where a BOQUEUE was defined,
    the method call:
    
      javax.jms.MessageConsumer.receiveNoWait()
    
    would return a null (assuming that there were no other messages
    available to consume on the queue), and the message would have
    been moved to the backout queue, specified by the BOQUEUE
    property on the queue where the message was being consumed from.
    
    
    If a BOQUEUE is not defined, the WebSphere MQ classes for JMS
    would attempt to move the message to the dead letter queue,
    which itself would fail with the exception:
    
    com.ibm.msg.client.jms.DetailedJMSException: JMSCMQ1046: The
    character set 'ccsid:1201' is not supported. An attempt was made
    to send or receive a map message, stream message or text message
    whose body is encoded using a character set not supported by the
    JVM. In the case of text messages, this exception might be
    thrown when the body of the message is first queried, rather
    than at receive time. Only encode a message using a character
    set known to be available to the receiving application.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
    Method)
    at
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeCons
    tructorAccessorImpl.java:86)
    at
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Delega
    tingConstructorAccessorImpl.java:58)
    at
    java.lang.reflect.Constructor.newInstance(Constructor.java:542)
    at
    com.ibm.msg.client.commonservices.j2se.NLSServices.createExcepti
    on(NLSServices.java:313)
    at
    com.ibm.msg.client.commonservices.nls.NLSServices.createExceptio
    n(NLSServices.java:388)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQMarshalUtils.
    throwBadCcsidException(WMQMarshalUtils.java:594)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQReceiveMarsha
    l.constructProviderMessageFromRFH2(WMQReceiveMarshal.java:257)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQReceiveMarsha
    l.constructProviderMessageFromProperties(WMQReceiveMarshal.java:
    196)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQReceiveMarsha
    l.createProviderMessage(WMQReceiveMarshal.java:495)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQReceiveMarsha
    l.exportProviderMessage(WMQReceiveMarshal.java:658)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison$PoisonMessage.getWMQMe
    ssage(WMQPoison.java:1913)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison$PoisonMessage.access$1
    000(WMQPoison.java:1797)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison.deadletter(WMQPoison.j
    ava:858)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage(WM
    QPoison.java:492)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage(WM
    QPoison.java:355)
    at
    com.ibm.msg.client.wmq.internal.WMQPoison.handlePoisonMessage(WM
    QPoison.java:324)
    at
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQCons
    umerShadow.java:1484)
    at
    com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInt
    ernal(WMQSyncConsumerShadow.java:239)
    at
    com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQCon
    sumerShadow.java:1144)
    at
    com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMe
    ssageConsumer.java:469)
    at
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveIn
    boundMessage(JmsMessageConsumerImpl.java:883)
    at
    com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive(J
    msMessageConsumerImpl.java:546)
    at
    com.ibm.mq.jms.MQMessageConsumer.receive(MQMessageConsumer.java:
    258)
    at myApplication.myMethod
    

Problem conclusion

  • Support for CCSID 1201 has been added to the WebSphere MQ
    classes for JMS.
    
    As dictated by the IBM Globalization standards for CCSID 1201:
    
    http://www.ibm.com/software/globalization/ccsid/ccsid1201.html
    
    this CCSID is mapped to the Java "java.nio.charset.Charset" name
    "UTF-16BE", meaning that the message bytes are decoded as "big
    endian ordered UTF-16".
    
    
    Note that as a by-product of APAR IV74821:
    
      http://www.ibm.com/support/docview.wss?uid=swg1IV74821
    
    support for CCSID 1201 was added to the WebSphere MQ classes for
    JMS in the releases for MQ v7.1 and v7.5, so this APAR IV88861
    is not applicable to those releases.
    
    ---------------------------------------------------------------
    The fix is targeted for delivery in the following PTFs:
    
    Version    Maintenance Level
    v7.1       7.1.0.9
    v8.0       8.0.0.7
    v9.0 CD    9.0.3
    v9.0 LTS   9.0.0.2
    
    The latest available maintenance can be obtained from
    'WebSphere MQ Recommended Fixes'
    http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006037
    
    If the maintenance level is not yet available information on
    its planned availability can be found in 'WebSphere MQ
    Planned Maintenance Release Dates'
    http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006309
    ---------------------------------------------------------------
    

Temporary fix

Comments

APAR Information

  • APAR number

    IV88861

  • Reported component name

    WMQ LIN X86-64

  • Reported component ID

    5724H7230

  • Reported release

    710

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2016-08-31

  • Closed date

    2017-03-31

  • Last modified date

    2017-05-02

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    WMQ LIN X86-64

  • Fixed component ID

    5724H7230

Applicable component levels

  • R710 PSY

       UP

[{"Line of Business":{"code":"LOB45","label":"Automation"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSFKSJ","label":"WebSphere MQ"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"7.1"}]

Document Information

Modified date:
09 March 2021