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