IBM Support

IV40180: MESSAGES ENCODED IN THE UTF-16 CHARACTER SET FAMILY READ FROM A QUEUE USING THE JMS API CANNOT BE PUT TO ANOTHER QUEUE

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • When using the WebSphere MQ JMS API to put messages which were
    got from a queue using character set ID 1200, the following
    error is written to the application server log:
    
    JMSCMQ1006: The value for
    'JMS_IBM_Character_Set':'UnicodeLittle' is not valid. The value
    'UnicodeLittle' for property 'JMS_IBM_Character_Set' is not
    correct.
    Check the linked WebSphere MQ exception reason and completion
    code.
    
    Additional Symptom(s) Search Keyword(s): KIXREVxxx
    

Local fix

  • Use character set ID 1208 (UTF-8) to write messages to the
    queue.
    

Problem summary

  • ****************************************************************
    USERS AFFECTED:
    This issue affects users of:
    
    - The WebSphere MQ V7 classes for JMS.
    - The WebSphere MQ V7 Resource Adapter.
    - The WebSphere Application Server V7 WebSphere MQ messaging
    provider.
    - The WebSphere Application Server V8 WebSphere MQ messaging
    provider.
    - The WebSphere Application Server V6.1 WebSphere MQ messaging
    provider who have configured the WebSphere variable
    MQ_INSTALL_ROOT to point to a WebSphere MQ V7 installation.
    
    who have applications which receive JMS TextMessages from a
    WebSphere MQ queue, where the message data has been encoded
    using Coded Character Set Identifier (CCSID) 1200, 13488 or
    17584 (the UCS-2 family of character encodings) and then send
    that JMS message to another queue using the WebSphere MQ classes
    for JMS API.
    
    Platforms affected:
    All Distributed (iSeries, all Unix and Windows) +Java +Java zOS
    ****************************************************************
    PROBLEM SUMMARY:
    When a JMS application reads a message from a WebSphere MQ
    queue using the WebSphere MQ classes for JMS API, and the
    message
    is of JMS TextMessage type where the CCSID of the message was
    one of:
    
    1200
    13488
    17584
    
    the WebSphere MQ message byte order property "Encoding" is
    read to determine the byte order of the character data, as
    documented within the product documentation:
    
    http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ib
    m.mq.csqzak.doc/fr14620_.htm
    
    under the statement:
    
    "For the UCS-2 character sets, the encoding (byte order) of
    the NameValueData must be the same as the encoding of the other
    fields in the MQRFH2 structure"
    
    The constructed JMS message contains a property which declares
    the encoding of the data:
    
    JMS_IBM_Character_Set
    
    For this set of message CCSID values, 1200, 13488 and 17584,
    this JMS property would contain the values:
    
    UnicodeBig         (for Encoding = 0x111 or int 273)
    UnicodeBigMarked   (with property from IV08982)
    UnicodeLittle      (for Encoding = 0x222 or int 546)
    
    The problem was that these JMS_IBM_Character_Set values were
    used to encode the data back into a byte form when sending a
    message to a WebSphere MQ queue.  The class which maps Java
    names to IBM CCSID numbers did not recognise these names,
    resulting in an exception of the form:
    
    (stack trace from the WebSphere MQ classes for JMS v7.0.1.9)
    
    com.ibm.msg.client.jms.DetailedJMSException: JMSCMQ1006: The
    value for 'JMS_IBM_Character_Set':'UnicodeLittle' is not valid.
    The value 'UnicodeLittle' for property 'JMS_IBM_Character_Set'
    is not correct. Check the linked WebSphere MQ exception reason
    and completion code.
    at
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
    Method)
    at
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeCons
    tructorAccessorImpl.java:56)
    at
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Delega
    tingConstructorAccessorImpl.java:39)
    at
    java.lang.reflect.Constructor.newInstance(Constructor.java:527)
    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.
    calculateMessageBodyCcsid(WMQMarshalUtils.java:716)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.c
    onstructMessageBuffers(WMQSendMarshal.java:138)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.e
    xportMQMDAndMessageBuffers(WMQSendMarshal.java:496)
    at
    com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.e
    xportMQMD(WMQSendMarshal.java:555)
    at
    com.ibm.msg.client.wmq.internal.WMQMessageProducer
    $ProducerShadow.send(WMQMessageProducer.java:524)
    at
    com.ibm.msg.client.wmq.internal.WMQMessageProducer.send
    (WMQMessageProducer.java:1223)
    at
    com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.sendMessa
    ge(JmsMessageProducerImpl.java:935)
    at
    com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.send_
    (JmsMessageProducerImpl.java:787)
    at
    com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.send
    (JmsMessageProducerImpl.java:442)
    at
    com.ibm.mq.jms.MQMessageProducer.send
    (MQMessageProducer.java:304)
    ... ... ...
    
    This exception was thrown back to the calling application, and
    the message send failed.
    

Problem conclusion

  • The WebSphere MQ classes for JMS code to manage the receiving
    of messages which are encoded in one of the CCSID values:
    
    1200
    13488
    17584
    
    was modified such that the values stored in the JMS message's
    property:
    
    JMS_IBM_Character_Set
    
    is one of:
    
    "UTF-16LE"       (for Encoding = 0x111)
    "UTF-16"         (for Encoding = 0x222)
    
    instead of the previously used names:
    
    "UnicodeLittle"  (for Encoding = 0x111)
    "UnicodeBig"     (for Encoding = 0x222)
    
    
    Note that the current convention for CCSID mapping used outside
    of the WebSphere MQ environment is:
    
    CCSID 1200 = UTF-16 big endian encoded
    CCSID 1202 = UTF-16 Little endian encoded
    CCSID 1204 = UTF-16 with byte order mark
    
    Because this interpretation differs from that used by WebSphere
    MQ, an additional property has been added to the WebSphere MQ
    classes for JMS to enable compatibility with other resources.
    By default this property is disabled to maintain behaviour for
    WebSphere MQ according with its documentation.  To change this
    behaviour, the property and value to enable the alternative
    function is:
    
    com.ibm.mq.cfg.CCSID.MapUtf16ByteOrderByCCSID=YES
    
    When this is enabled, the WebSphere MQ message's property
    'Encoding' is not used to determine the byte order of the
    character data.  The result of this is that the WebSphere MQ
    message's CCSID is solely used to decode the byte data into
    character form.
    
    For example, a message encoded in CCSID 1200 will always be
    decoded using the "UTF-16" Java Character set encoding,
    independent of WebSphere MQ messages 'Encoding' property.
    
    ---------------------------------------------------------------
    The fix is targeted for delivery in the following:
    
                       v7.0
    Platform           Fix Pack 7.0.1.12
    --------           --------------------
    Windows            7.0.1.12
    AIX                7.0.1.12
    HP-UX (PA-RISC)    7.0.1.12
    HP-UX (Itanium)    7.0.1.12
    Solaris (SPARC)    7.0.1.12
    Solaris (x86-64)   7.0.1.12
    iSeries            7.0.1.12
    Linux (x86)        7.0.1.12
    Linux (x86-64)     7.0.1.12
    Linux (zSeries)    7.0.1.12
    Linux (Power)      7.0.1.12
    zOS                7.0.1.12
    
                       v7.1
    Platform           Fix Pack 7.1.0.4
    --------           --------------------
    Windows            7.1.0.4
    AIX                7.1.0.4
    HP-UX (Itanium)    7.1.0.4
    Solaris (SPARC)    7.1.0.4
    Solaris (x86-64)   7.1.0.4
    iSeries            7.1.0.4
    Linux (x86)        7.1.0.4
    Linux (x86-64)     7.1.0.4
    Linux (zSeries)    7.1.0.4
    Linux (Power)      7.1.0.4
    zOS                7.1.0.4
    
    Version            v7.5
    --------           --------------------
    Fix available in:  7.5.0.3
    
    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

    IV40180

  • Reported component name

    WMQ LIN X86-64

  • Reported component ID

    5724H7230

  • Reported release

    701

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2013-04-18

  • Closed date

    2013-05-31

  • Last modified date

    2013-08-19

  • 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

  • R701 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.0.1"}]

Document Information

Modified date:
03 October 2021