Author |
Message
|
LH33 |
Posted: Fri Dec 12, 2003 10:44 am Post subject: Trace node not producing ExceptionList |
|
|
Master
Joined: 21 Nov 2002 Posts: 200
|
I have a message flow that is trying to process an XML transaction with unsupported XML characters in it. I want it to kick out to an error queue. I have a trace node wired to the Out, Failure and Catch node of my input terminal with $Root, and $ExceptionList in the pattern. Here is the input XML:
<SyncSpecFieldReport revision="1.0.0" environment="Test">
<ApplicationArea>
<Sender>
<Component>ROMS</Component>
<Confirmation>Never</Confirmation>
<AuthorizationId>C09244</AuthorizationId>
</Sender>
<CreationDateTime>2003-11-12T09:25:49</CreationDateTime>
<BODId>D66031D1E5F34400874711A5E1A32139</BODId>
</ApplicationArea>
<DataArea>
<SpecFieldReport>
<Location>
<Address>
<FreeFormat>R 5906 PARK-HGTS AV, -</FreeFormat>
</Address>
<Customer>
<Name>RAKHIL GOLDFARB</Name>
</Customer>
</Location>
<AgencyCode>EOM</AgencyCode>
<Shift>
<ShiftCode>DAY-4</ShiftCode>
<ShiftDate>2003-11-12</ShiftDate>
</Shift>
<WorkCodeUDFS>
<WorkCodeUDF index="71">Isolated def. Cable btwn trans. 0015 & 0016.</WorkCodeUDF>
</WorkCodeUDFS>
</SpecFieldReport>
</DataArea>
</SyncSpecFieldReport>
Here is the trace node contents off the failure terminal: (The trace node contents of the other two terminals are the same)
(
(0x1000000)Properties = (
(0x3000000)MessageSet = ''
(0x3000000)MessageType = ''
(0x3000000)MessageFormat = ''
(0x3000000)Encoding = 546
(0x3000000)CodedCharSetId = 437
(0x3000000)Transactional = TRUE
(0x3000000)Persistence = TRUE
(0x3000000)CreationTime = GMTTIMESTAMP '2003-12-12 18:22:17.070'
(0x3000000)ExpirationTime = -1
(0x3000000)Priority = 0
(0x3000000)ReplyIdentifier = X'000000000000000000000000000000000000000000000000'
(0x3000000)ReplyProtocol = 'MQ'
(0x3000000)Topic = NULL
)
(0x1000000)MQMD = (
(0x3000000)SourceQueue = 'DSPCH_OMS_UPDATED_DATA'
(0x3000000)Transactional = TRUE
(0x3000000)Encoding = 546
(0x3000000)CodedCharSetId = 437
(0x3000000)Format = 'MQSTR '
(0x3000000)Version = 2
(0x3000000)Report = 0
(0x3000000)MsgType = 8
(0x3000000)Expiry = -1
(0x3000000)Feedback = 0
(0x3000000)Priority = 0
(0x3000000)Persistence = 1
(0x3000000)MsgId = X'414d51204745544d5131202020202020b4dfd43f12305f05'
(0x3000000)CorrelId = X'000000000000000000000000000000000000000000000000'
(0x3000000)BackoutCount = 1
(0x3000000)ReplyToQ = ' '
(0x3000000)ReplyToQMgr = 'GETMQ1 '
(0x3000000)UserIdentifier = 'MTSRUN_MQ '
(0x3000000)AccountingToken = X'1601051500000008691451fa547e13c811bf7b421f000000000000000000000b'
(0x3000000)ApplIdentityData = ' '
(0x3000000)PutApplType = 11
(0x3000000)PutApplName = ':\WINNT\system32\dllhost.exe'
(0x3000000)PutDate = DATE '2003-12-12'
(0x3000000)PutTime = GMTTIME '18:22:17.070'
(0x3000000)ApplOriginData = ' '
(0x3000000)GroupId = X'000000000000000000000000000000000000000000000000'
(0x3000000)MsgSeqNumber = 1
(0x3000000)Offset = 0
(0x3000000)MsgFlags = 0
(0x3000000)OriginalLength = -1
)
)
After running this XML, the queue depth of my error queue is 1, however, when I look at the message there is no data there. Can someone help me understand why the message gets truncated as soon as it enters the input terminal and also why I don't see anything in my trace node. Thanks! Lisa |
|
Back to top |
|
 |
skn |
Posted: Fri Dec 12, 2003 11:42 am Post subject: |
|
|
 Centurion
Joined: 21 May 2003 Posts: 112 Location: Dallas
|
Your entire message goes through input node.When it encounters the trace node it tries to parse it.Since your input is not a well formed XML,the parser throws an exception and does not parse the message.It can output to trace only the part of the message that is parsed.
When you say you look at the message, did you look at the trace node output or the message inside the queue.I believe you should get the entire message in the queue even though it fialed the parse. |
|
Back to top |
|
 |
LH33 |
Posted: Fri Dec 12, 2003 11:45 am Post subject: |
|
|
Master
Joined: 21 Nov 2002 Posts: 200
|
I looked at the message on the queue and it was empty even though the depth says 1. Why doesn't the trace node show the exception that the parser throws? |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri Dec 12, 2003 12:31 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
LH33 wrote: |
I looked at the message on the queue and it was empty even though the depth says 1. Why doesn't the trace node show the exception that the parser throws? |
The exception list isn't populated when the failure terminal is called.
Also, if you have a problem like this, and you have a trace node on the failure terminal, and the trace node tries to parse the message...
You're going to get a loop. This is bad. This may also explain why you're not seeing the message on the queue or the backout queue, it's looping on the input queue.
You can disconnect the failure terminal, and add a throw node after the trace on the catch terminal. This will allow normal backout processing to occur, while still logging those errors that reach the catch node. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
skn |
Posted: Fri Dec 12, 2003 12:31 pm Post subject: |
|
|
 Centurion
Joined: 21 May 2003 Posts: 112 Location: Dallas
|
Well if the queue depth is 1 and you cant see the message , the only reason I can think of is message expiry .
Coming to the exceptions, try removing the $Root before the $Exception , or place it after $Exception. |
|
Back to top |
|
 |
LH33 |
Posted: Mon Dec 15, 2003 7:53 am Post subject: |
|
|
Master
Joined: 21 Nov 2002 Posts: 200
|
I disconnected the failure terminal and added a throw node after the trace on the catch terminal. The messge now goes to the Dead letter queue and looks like the following:
00000000 DLH .... ....DSPC 444C4820 01000000 00000100 44535043
00000016 H_OMS_UP DATED_DA 485F4F4D 535F5550 44415445 445F4441
00000032 TA 54412020 20202020 20202020 20202020
00000048 GETM 20202020 20202020 20202020 4745544D
00000064 Q1 51312020 20202020 20202020 20202020
00000080 20202020 20202020 20202020 20202020
00000096 "... 20202020 20202020 20202020 22020000
00000112 ....MQST R .... B5010000 4D515354 52202020 0B000000
00000128 WebSpher eMQInteg 57656253 70686572 654D5149 6E746567
00000144 rator2 2003 7261746F 72322020 20202020 32303033
00000160 12151543 0900 31323135 31353433 30393030
Any ideas?
Thanks, Lisa |
|
Back to top |
|
 |
Michael Dag |
Posted: Mon Dec 15, 2003 8:40 am Post subject: |
|
|
 Jedi Knight
Joined: 13 Jun 2002 Posts: 2607 Location: The Netherlands (Amsterdam)
|
Lisa,
don't know if this helps, but we simply add the exceptionlist to the message using a compute node.
So from your mqinput node hook up the catch terminal to a compute node
Copy entire message and ESQL:
SET Outputroot.XML.EXCEPTIONLIST = InputExceptionList;
Hook the compute node to an MQOutput node.
Michael |
|
Back to top |
|
 |
LH33 |
Posted: Mon Dec 15, 2003 9:04 am Post subject: |
|
|
Master
Joined: 21 Nov 2002 Posts: 200
|
I tried your suggestion and the message goes to the queue, however, there is no data in it. It appears as though as soon as it hits the input terminal, something happens that strips off the XML portion of the message and the only thing I can see is the following in a trace node wired to the out terminal of the input node :
(
(0x1000000)Properties = (
(0x3000000)MessageSet = ''
(0x3000000)MessageType = ''
(0x3000000)MessageFormat = ''
(0x3000000)Encoding = 546
(0x3000000)CodedCharSetId = 437
(0x3000000)Transactional = TRUE
(0x3000000)Persistence = TRUE
(0x3000000)CreationTime = GMTTIMESTAMP '2003-12-15 15:41:37.100'
(0x3000000)ExpirationTime = -1
(0x3000000)Priority = 0
(0x3000000)ReplyIdentifier = X'000000000000000000000000000000000000000000000000'
(0x3000000)ReplyProtocol = 'MQ'
(0x3000000)Topic = NULL
)
(0x1000000)MQMD = (
(0x3000000)SourceQueue = 'DSPCH_OMS_UPDATED_DATA'
(0x3000000)Transactional = TRUE
(0x3000000)Encoding = 546
(0x3000000)CodedCharSetId = 437
(0x3000000)Format = 'MQSTR '
(0x3000000)Version = 2
(0x3000000)Report = 0
(0x3000000)MsgType = 8
(0x3000000)Expiry = -1
(0x3000000)Feedback = 0
(0x3000000)Priority = 0
(0x3000000)Persistence = 1
(0x3000000)MsgId = X'414d51204745544d5131202020202020b4dfd43f12503809'
(0x3000000)CorrelId = X'000000000000000000000000000000000000000000000000'
(0x3000000)BackoutCount = 0
(0x3000000)ReplyToQ = ' '
(0x3000000)ReplyToQMgr = 'GETMQ1 '
(0x3000000)UserIdentifier = 'MTSRUN_MQ '
(0x3000000)AccountingToken = X'1601051500000008691451fa547e13c811bf7b421f000000000000000000000b'
(0x3000000)ApplIdentityData = ' '
(0x3000000)PutApplType = 11
(0x3000000)PutApplName = ':\WINNT\system32\dllhost.exe'
(0x3000000)PutDate = DATE '2003-12-15'
(0x3000000)PutTime = GMTTIME '15:41:37.100'
(0x3000000)ApplOriginData = ' '
(0x3000000)GroupId = X'000000000000000000000000000000000000000000000000'
(0x3000000)MsgSeqNumber = 1
(0x3000000)Offset = 0
(0x3000000)MsgFlags = 0
(0x3000000)OriginalLength = -1
)
) |
|
Back to top |
|
 |
|