Author |
Message
|
ghada |
Posted: Sun Oct 08, 2006 2:08 am Post subject: Exception at Output Node |
|
|
Apprentice
Joined: 13 Oct 2005 Posts: 41 Location: Egypt
|
HI All
Im using WBIMB6
Im using Compute node to change some values in my message, but when the message goes to Output node it fails and throughs exception
here is the last element of the exception list
"Text = Should never call writeTree on something that isn't rendered as an element"
Im using the MRM domain
and I didn't change any thing in the message structure, I only changed some elements' values
thanks in advance
Ghada |
|
Back to top |
|
 |
fjb_saper |
Posted: Sun Oct 08, 2006 3:50 am Post subject: Re: Exception at Output Node |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
ghada wrote: |
HI All
Im using WBIMB6
Im using Compute node to change some values in my message, but when the message goes to Output node it fails and throughs exception
here is the last element of the exception list
"Text = Should never call writeTree on something that isn't rendered as an element"
Im using the MRM domain
and I didn't change any thing in the message structure, I only changed some elements' values
thanks in advance
Ghada |
It really depends on what you changed... If you are using a CWF format and you changed a group level instead of the content of an element level.... The previous few entries on the exception tree should give you more information...
Basically what is happening is that the parser is unable to serialize your message as the content of the different levels does not match the contract.
All the tags may be in the right order but the tag content does not match the definition....
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
ghada |
Posted: Sun Oct 08, 2006 6:12 am Post subject: |
|
|
Apprentice
Joined: 13 Oct 2005 Posts: 41 Location: Egypt
|
Thanks fjb_saper for your reply
1- Im using XML wire format in my message set
2- the following part is the only part I modify in the message value
-- put the new code in the Output Message --
DECLARE FieldExists BOOLEAN EXISTS(Environment.Variables.Nd[]);
IF FieldExists <> FALSE THEN
SET cursor VALUE = Environment.Variables.Nd;
END IF;
---------------------------
cursor points to the current element Im modifying.
Nd is an element from DB stored in the Environment tree
and I dont change the value in the message unless I have a value returned from DB
the values are changed correctly and all others are left the same as Input message, I dont know what is the difference
thanks in advance
ghada |
|
Back to top |
|
 |
fjb_saper |
Posted: Sun Oct 08, 2006 8:45 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Well it may have to do that it looks like you are inserting what is basically a DB row into a tree. You might have to insert each field separately...
On the other hand you never said whether the change you are making is described in your message set. It maybe that you would have to clear the message set and message type field from the properties..., but then I would probably try the XMLNS domain and not the MRM domain...
As I have very little detail from you this is mostly on speculation.
Hope it helps some.  _________________ MQ & Broker admin |
|
Back to top |
|
 |
jefflowrey |
Posted: Sun Oct 08, 2006 8:59 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Environment.Variables.Nd[] is the list of all children of Environment.Variables.Nd. Sort of.
VALUE Environment.Variables.Nd is the value component of the element Environment.Variables.Nd. But if Environment.Variables.Nd was created by a SELECT or something, then the element itself isn't going to have a value - just children.
I do not expect - but it's been a bit too long since I've read the documentation on the EXISTS function - that the EXISTS function will return anything meaningful for a list, rather than a scalar value.
You should either manually build a tree description of your data, both in environment and OutputRoot, or run some traces. Remember that everything in WMB v6 and WBIMB v5 and WMQI v2.1 is either a Tree or a Scalar, and never an array.
Then go back and think about how you want to manipulate these tree structures. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
ghada |
Posted: Mon Oct 09, 2006 12:04 am Post subject: |
|
|
Apprentice
Joined: 13 Oct 2005 Posts: 41 Location: Egypt
|
Hi All
First of all thanks alot for your replys
I wanted to clear somethings
1- the SELECT statement returns only one value which I keep in the Environment tree.
2- all what Im doing is that Im changing the value of some elements in the message D=x becomes D=y where x and y are of the same type, so this does not affect my message set,I think
3- here how Environment tree appears in the debug mode
Environment
Variables
Sd = 2004
Rc = 1999
D_T = 46
C_T = CITIES
S_C_T = CITY
S_C_F = UNCODE
Nd = COUNTRY
and the statement I wrote copies the value COUNTRY correctly to the message, and the message goes out of Compute node without any errors.
4-
Quote: |
Environment.Variables.Nd[] is the list of all children of Environment.Variables.Nd. Sort of. |
do you mean that the test Im using may not be correct, I think it works I traced it and it changed the message elements only when the condition is true ????!!!!!
thanks for your help in advance
Ghada |
|
Back to top |
|
 |
kimbert |
Posted: Mon Oct 09, 2006 12:31 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Hi ghada,
Does it work if you remove almost all of your message flow and replace it with a very simple Compute node which changes the value of one element?
If that works, the problem must be introduced by your message transformation logic. |
|
Back to top |
|
 |
ghada |
Posted: Mon Oct 09, 2006 3:56 am Post subject: |
|
|
Apprentice
Joined: 13 Oct 2005 Posts: 41 Location: Egypt
|
Hi Kimbert
thanks for your reply
I did as you said, I created a new message flow
MQInput-> Compute -> MQOutput
and I copied all modules I used and it worked
the only change I made to my ESQL Code was:
CREATE COMPUTE MODULE TCC2_Compute
instead of
CREATE COMPUTE MODULE TCC_Compute
and all the rest of the code remained the same.
and I used the same message set.
what does that mean?????
thanks Alot
Ghada |
|
Back to top |
|
 |
kimbert |
Posted: Mon Oct 09, 2006 4:28 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
what does that mean????? |
It means that something somewhere did not function correctly.
Maybe the tooling failed to pick up some of your changes, and creating a new Compute module fixed that. I suspect we will never know. |
|
Back to top |
|
 |
ghada |
Posted: Tue Oct 10, 2006 12:45 am Post subject: |
|
|
Apprentice
Joined: 13 Oct 2005 Posts: 41 Location: Egypt
|
Hi Kimbert
thanks for your help, it works now as I said
thanks Alot
Ghada |
|
Back to top |
|
 |
|