ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » WMQI XML parsing without paired tags

Post new topic  Reply to topic
 WMQI XML parsing without paired tags « View previous topic :: View next topic » 
Author Message
PaulHuang
PostPosted: Thu Mar 21, 2002 5:22 pm    Post subject: Reply with quote

Novice

Joined: 31 Jul 2001
Posts: 18

hello!

In WMQI V2.1 , I've found that if a XML tag not in pair , for example , there is a <Message> , but has no </Message> and WMQI will still successfully parse this message into OK queue. Does it has any problem with WMQI V2.1 XML parser ?

MQInput Node
Message Domain -> XML
Compute Node
Set OutputRoot = InputRoot
IF "InputRoot"."XML"."Head"."F101" NOT NULL || "InputRoot"."XML"."Head"."Message" NOT NULL
SET OutputRoot.XML.Status = "Y"
ELSE
SET OutputRoot.XML.Status = "N"
END IF

Compute Node => Output => OK Queue
=> Fail => Fail Queue

When I put a message without a </Message>

<?xml version="1.0" encoding = "Big5" ?>
<XmlForm>
<Head>
<F101>0100700001</F101>
<F102>0100700001</F102>
<F103>33333333</F103>
<F104>01</F104>
<F105>0</F105>
<F106>20020303222222</F106>
<F111>000000</F111>
</Head>
<Message>
</XmlForm>

This message will go to OK queue.
Does it the parser problem or my problem ?
Back to top
View user's profile Send private message Send e-mail
kirani
PostPosted: Thu Mar 21, 2002 6:22 pm    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

Hi,

The above code wouldn't work. You must have mistyped it. I tried testing following ESQL on my box (WMQI2.1 on WIN2K),

SET OutputRoot = InputRoot;

IF ("InputRoot"."XML"."Head"."F101" IS NOT NULL OR "InputRoot"."XML"."Head"."Message" IS NOT NULL) THEN
SET OutputRoot.XML.Status = 'Y' ;
ELSE
SET OutputRoot.XML.Status = 'N' ;
END IF ;

and the message goes to failure queue. It is giving me following exception,

(
(0x1000000)RecoverableException = (
(0x3000000)File = 'F:buildS210_PsrcDataFlowEngineImbMqOutputNode.cpp'
(0x3000000)Line = 708
(0x3000000)Function = 'ImbMqOutputNode::evaluate'
(0x3000000)Type = 'ComIbmMQOutputNode'
(0x3000000)Name = 'c3990830-ec00-0000-0080-ff4d00d758d4'
(0x3000000)Label = 'test_qtof.MQOutput2'
(0x3000000)Text = 'Caught exception and rethrowing'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 2230
(0x1000000)ParserException = (
(0x3000000)File = 'F:buildS210_PsrcMTIMTIforBrokerGenXmlParser2XmlImbParser.cpp'
(0x3000000)Line = 217
(0x3000000)Function = 'XmlImbParser::refreshBitStreamFromElements'
(0x3000000)Type = 'ComIbmMQInputNode'
(0x3000000)Name = 'd5390730-ec00-0000-0080-ff4d00d758d4'
(0x3000000)Label = 'test_qtof.MQInput1'
(0x3000000)Text = 'XML Writing Errors have occurred'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 5010
(0x1000000)ParserException = (
(0x3000000)File = 'F:buildS210_PsrcMTIMTIforBrokerGenXmlParser2XmlImbParser.cpp'
(0x3000000)Line = 505
(0x3000000)Function = 'XmlImbParser::checkForBodyElement'
(0x3000000)Type = ''
(0x3000000)Name = ''
(0x3000000)Label = ''
(0x3000000)Text = 'No valid body of the document could be found.'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 5005
)
)
)
)

Eitehr you can change your compute node to pass "message headers" only or change your esql to

IF ....
THEN
SET OutputRoot.XML.XmlForm.Status = 'Y' ;
ELSE
SET OutputRoot.XML.XmlForm.Status = 'N' ;
END IF ;

This time message went to output queue. If I pass invalid XML message, message goes to failure queue. So XML Parser works as expected!

Kiran
Back to top
View user's profile Send private message Visit poster's website
PaulHuang
PostPosted: Thu Mar 21, 2002 10:42 pm    Post subject: Reply with quote

Novice

Joined: 31 Jul 2001
Posts: 18

hi, thanks for the response. The existance of the compute node is due to the encounter of when Input node processing a none-wellform XML data (in this case, the <Message> tag is missing), it still outputs to the "out" terminal instead of "failure" terminal. This is happening when the broker running on AIX platform but not on NT platform. Is it correct the xml parser carried out parsing when message is processed at Input NODE?

thanks!
Back to top
View user's profile Send private message Send e-mail
kirani
PostPosted: Fri Mar 22, 2002 9:42 am    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

What CSD are you using on AIX box?
MQSI uses Justintime parsing, i.e. MQSI will parse the message when you refer to the parsed field for the first time. You can force parser at MQInput node by selecting "Validate Message" option.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » WMQI XML parsing without paired tags
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.