IBM Support

MQ Adapter fails with Reason Code 2148 when putting a message with an MQIIH header to a local queue

Troubleshooting


Problem

When using IBM WebSphere Transformation Extender (WTX), the WebSphere MQ Adapter reports an MQ Reason Code 2148 error message when putting an MQ message with an MQIIH header to a local queue.

Symptom

The WTX WebSphere MQ Adapter fails with Reason Code 2148, which indicates that the message contains an MQIIH structure that is not valid, when putting a message with an MQIIH header to a local queue.

Cause


The map output card type tree includes the MQIIH header with the Binary Integer values defined with the Byte Order set to Native, meaning the Native Byte Order of the operating system will be used.

The MQ Reason Code 2148 error is caused by a mismatch of the Byte Order of the Binary Integer values defined in output type tree for the MQIIH header and the expected Byte Order for Binary Integer values, which is determined by the MQMD header Encoding field value.

The problem occurs when the MQMD header Encoding value does not match the Native Encoding for the operating system or platform where the map is being executed.

Diagnosing The Problem


The following reference information may be used to determine the correct MQMD header Encoding value to use for the operating system where WTX is running the map..

The MQMD header Encoding value determines whether the Byte Order of the Binary Integer values are expected to be Normal (Big Endian) or Reversed (Little Endian).

http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzaq.doc%2Ffc_MQENC_.htm

The Encoding value is the sum of the Integer Encoding, Decimal Encoding and Float Encoding values.

MQENC_INTEGER_NORMAL = 1
MQENC_INTEGER_REVERSED = 2

MQENC_DECIMAL_NORMAL = 16
MQENC_DECIMAL_REVERSED = 32

MQENC_FLOAT_IEEE_NORMAL = 256
MQENC_FLOAT_IEEE_REVERSED = 512
MQENC_FLOAT_S390 = 768

The Native Unix Encoding is 273 (1 + 16 + 256 = 273) which expects the Binary Integer to be Normal (Big Endian).

The Native Linux or Native Windows Encoding is 546 (2 + 32 + 512 = 546) which expects the Binary Integer to be Reversed (Little Endian).

The Native z/OS Encoding is 785 (1 + 16 + 768 = 785) which expects the Binary Integer to be Normal (Big Endian).

Resolving The Problem

Resolve the problem by using the appropriate MQMD header Encoding value when creating the MQMD header using a map output card type tree. The MQMD header Encoding field can be set to the value that corresponds to the Native Encoding of the operating system where the map is run.

Operating SystemMQMD Encoding value
Unix273
Linux or Windows546
z/OS785

For example, if running the map on Linux then the MQMD header Encoding value would be 546.

[{"Product":{"code":"SSVSD8","label":"IBM Transformation Extender"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"IBM WebSphereMQ Adapter","Platform":[{"code":"PF016","label":"Linux"},{"code":"PF035","label":"z\/OS"},{"code":"PF033","label":"Windows"},{"code":"PF027","label":"Solaris"},{"code":"PF025","label":"Platform Independent"},{"code":"PF010","label":"HP-UX"},{"code":"PF002","label":"AIX"}],"Version":"8.4.1;8.4;8.3","Edition":"","Line of Business":{"code":"LOB59","label":"Sustainability Software"}}]

Document Information

Modified date:
16 June 2018

UID

swg21569475