Author |
Message
|
nathanw |
Posted: Wed Oct 10, 2012 2:14 am Post subject: Queue Manager CCSID V OS CCSID |
|
|
 Knight
Joined: 14 Jul 2004 Posts: 550
|
OK chaps thinking caps on
OS = AIX
MQ = 7.0.1.8
MB = 8.0.0.0
QM CCSID set to 819 (default on creation)
We have a complex set of flows that format and route data.
In the end we are writing to an output queue via a destination list
Issue Part 1
We have special characters eg Euro in the incoming message.
On the output we have character issue problems as the 819 does not support Euro character.
So in order to handle this we are trying to set the message CCSID to 1208.
So question is
If in esql we set the CCSID of the MQMD to 1208 would
a) the euro symbol be parsed correctly
b) the message stay as 1208 in the QM so the target application reads it correctly or will QM CCSID overwrite
I suspect I know the answer but I would like confirmation
Issue Part 2
As part of the solution / work around to the above we have added the esql code below
Code: |
SET OutputRoot.MQMD.CodedCharSetId = 1208; |
We then pass the message to a Destination List to write to a queue
We then get a 2142 error
Code: |
2142 0x0000085e MQRC_HEADER_ERROR |
Code: |
2012-10-10 09:59:36.104952 6949 MessageException BIP2667E: An error occurred in node 'Node Name' writing message to queue ''Queue Name'' on queue manager ''''. State = '-1' ''MQW102'' '2142' ''''
An error occurred when a message flow node attempted to write a message to a queue. The reason code from the MQPUT is displayed as the 3rd (native error) state.
Check the WebSphere MQ completion and reason codes in the WebSphere MQ Application Programming Reference manual to establish the cause of the error, taking any appropriate action. It may be necessary to restart the message broker after you have performed this recovery action. |
Is this because of a CCSID conflict do you think?
Any thoughts, ideas, postulations gratefully accepted...... _________________ Who is General Failure and why is he reading my hard drive?
Artificial Intelligence stands no chance against Natural Stupidity.
Only the User Trace Speaks The Truth  |
|
Back to top |
|
 |
mqjeff |
Posted: Wed Oct 10, 2012 2:23 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
If you don't set the ccsid at all, does the message come out in 819?
Does it work if you use 1200 or 1202 instead of 1208? |
|
Back to top |
|
 |
zpat |
Posted: Wed Oct 10, 2012 3:00 am Post subject: |
|
|
 Jedi Council
Joined: 19 May 2001 Posts: 5866 Location: UK
|
You can use the constant value MQCCSI_UNICODE_1208
But that doesn't explain the MQRC 2142.
Did you copy the MQMD from the input message to the output message (before overriding the CCSID)?
What CCSID was the input message using? |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Oct 10, 2012 3:19 am Post subject: Re: Queue Manager CCSID V OS CCSID |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
nathanw wrote: |
We have special characters eg Euro in the incoming message.
|
This says a good deal about your problem
Some points to Consider
1) The QMGR CCSID matters little except when creating messages without a specific CCSID set.
2) What CCSID was the input message sent with? That is the key. If tht CCSID does not support the Euro Symbol then you are at the moment fiddling while <insert least popular place> burns to the ground.
You need to get the input message to be send in a CCSID that supports the Euro Symbol. 1208 does it nicely but if that isn't possible then 923 does just as well.
817 == ISO-8859-1
923 == ISO-8859-15 {Western European Latin with Euro Support}
Now if the Input message was created on the same QMGR that Broker is running on then you have two options.
1) Change the QMGR CCSID to something a little more friendly but beware this could break other things in ways you didn't expect.
2) Get the creator application to NOT use default QMCR CCSID when creating the message in the first place.
Good luck with that. Many devs go 'Eh? Wtf? Whats a CCSID? etc etc' when asked 'What CCSID did you use when you send the message?'
I am sure that kimbert will be along soon with some more words of wisdom. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
mqjeff |
Posted: Wed Oct 10, 2012 3:32 am Post subject: Re: Queue Manager CCSID V OS CCSID |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
smdavies99 wrote: |
Some points to Consider
1) The QMGR CCSID matters little except when creating messages without a specific CCSID set.
2) What CCSID was the input message sent with? That is the key. If tht CCSID does not support the Euro Symbol then you are at the moment fiddling while <insert least popular place> burns to the ground. |
Except that, since this is *broker*, the message data has already been converted to 1200 or 1202 by the time it gets into the logical message tree.
And CCSID problems with the contents of the message shouldn't cause an MQRC 2142. Produce mangled data or cause the tree to fail to serialize, sure, but not a 2142.
smdavies99 wrote: |
I am sure that kimbert will be along soon with some more words of wisdom. |
 |
|
Back to top |
|
 |
nathanw |
Posted: Wed Oct 10, 2012 3:54 am Post subject: |
|
|
 Knight
Joined: 14 Jul 2004 Posts: 550
|
mqjeff wrote: |
If you don't set the ccsid at all, does the message come out in 819?
Does it work if you use 1200 or 1202 instead of 1208? |
Jeff Yes it does BUT the Euro symbol is garbled as it is not supported in 819
zpat wrote: |
You can use the constant value MQCCSI_UNICODE_1208
But that doesn't explain the MQRC 2142.
Did you copy the MQMD from the input message to the output message (before overriding the CCSID)?
What CCSID was the input message using? |
Yes the message headers are copied across and then the CCSID reset.
------
Part of the issue here is I am coming into this issue cold and after alot has happened on it so I am playing catch up
Part of the solution uses Pub/Sub which as we know after 6.1 was moved into MQ instead of Broker so the QM CCSID comes into play alot more.
I am digging around alot and finding info out but I wil come back to you all as and when I can
smdavies yes I know what you mean about CCSID and developers.
We are looking at changing the CCSID of the QM at the moment and will be carrying out some tests in a safe environment shortly _________________ Who is General Failure and why is he reading my hard drive?
Artificial Intelligence stands no chance against Natural Stupidity.
Only the User Trace Speaks The Truth  |
|
Back to top |
|
 |
mqjeff |
Posted: Wed Oct 10, 2012 4:32 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
nathanw wrote: |
mqjeff wrote: |
If you don't set the ccsid at all, does the message come out in 819?
Does it work if you use 1200 or 1202 instead of 1208? |
Jeff Yes it does BUT the Euro symbol is garbled as it is not supported in 819 |
So if you don't set the CCSID, then the message comes out as 819, and mangled. (this is expected behavior)
If you set the CCSID to 1200 or 1202, what happens? |
|
Back to top |
|
 |
NealM |
Posted: Wed Oct 10, 2012 7:21 pm Post subject: |
|
|
 Master
Joined: 22 Feb 2011 Posts: 230 Location: NC or Utah (depends)
|
Code: |
SET OutputRoot.Properties.CodedCharSetId=1208;
SET OutputRoot.Properties.Encoding=546;
.
.
.
SET OutputRoot.MQMD.Encoding = 546;
SET OutputRoot.MQMD.CodedCharSetId = 1208;
|
Also, Message Context = Set All might be a good idea. |
|
Back to top |
|
 |
|