Author |
Message
|
EricCox |
Posted: Thu Oct 11, 2012 12:35 pm Post subject: ParserException BIP5005E: No valid body of document found |
|
|
Master
Joined: 08 Apr 2011 Posts: 292
|
To all,
I send an inbound COBOL structure to a Subflow. In the subflow I use a ResetContentDescriptor to assign the message set, declare necessary SOAP output code page and encoding, null out the MQ header, reach into the message set for values and lay down required SOAP Header elements.
All the ESQL appears to assign properly. But when the Subflow sends the message to the HTTP Reply node I get this BIP5005E error.
What are the common causes for this error. I'm following, trying to, an exact pattern that I have for other message handling. The difference is here I'm going into and out of a common Subflow for error handling.
ParserException BIP5005E: No valid body of the document could be found.
There should be one, and only one, top level element of type Element or EmptyElement and this is not the case for the current message.
Check that the XML message being passed in is a well formed XML message that adheres to the XML specification and that only one of the above exists as a child of the root.
As always your help is greatly appreciated.
Eric |
|
Back to top |
|
 |
lancelotlinc |
Posted: Thu Oct 11, 2012 12:41 pm Post subject: |
|
|
 Jedi Knight
Joined: 22 Mar 2010 Posts: 4941 Location: Bloomington, IL USA
|
Your message is unclear as to the sequence of nodes. Please post your flow node order. HTTP Reply? _________________ http://leanpub.com/IIB_Tips_and_Tricks
Save $20: Coupon Code: MQSERIES_READER |
|
Back to top |
|
 |
Vitor |
Posted: Thu Oct 11, 2012 12:42 pm Post subject: Re: ParserException BIP5005E: No valid body of document fou |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
EricCox wrote: |
What are the common causes for this error. |
Frankly, the one in the message text.
EricCox wrote: |
ParserException BIP5005E: No valid body of the document could be found.
There should be one, and only one, top level element of type Element or EmptyElement and this is not the case for the current message.
Check that the XML message being passed in is a well formed XML message that adheres to the XML specification and that only one of the above exists as a child of the root. |
The output node has either found nothing it can believe in as an XML root tag, or it's found more than 1 thing it believes can be an XML root tag.
Put in a Trace node, take a user trace, see what's actually in the message tree when it hits the node & go from there.
If I had to guess, I'd guess that some of the XML message is under 1 tag and some under another, e.g. the SOAP header has been given it's own XMLNSC domain. If not that, I'd guess that the XML message is not the last thing in the tree and another segment follows it.
If not that, I'd say, "Really?" and not be surprised at all that both of my guesses were wrong. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
EricCox |
Posted: Thu Oct 11, 2012 12:46 pm Post subject: Trace After Compute Node in Subflow |
|
|
Master
Joined: 08 Apr 2011 Posts: 292
|
( ['MQROOT' : 0x615878128]
(0x01000000):Destination = (
(0x01000000):HTTP = (
(0x03000000):RequestIdentifier = X'414d5120514d424b5244303120202020402d44502114b89c' (BLOB)
)
)
)
( ['MQROOT' : 0x568155640]
(0x01000000):Properties = ( ['MQPROPERTYPARSER' : 0x616456232]
(0x03000000):MessageSet = 'MFNEEVO002001' (CHARACTER)
(0x03000000):MessageType = 'AllTelAbend' (CHARACTER)
(0x03000000):MessageFormat = 'XML' (CHARACTER)
(0x03000000):Encoding = 546 (INTEGER)
(0x03000000):CodedCharSetId = 1208 (INTEGER)
(0x03000000):Transactional = TRUE (BOOLEAN)
(0x03000000):Persistence = FALSE (BOOLEAN)
(0x03000000):CreationTime = GMTTIMESTAMP '2012-10-11 20:40:26.970' (GMTTIMESTAMP)
(0x03000000):ExpirationTime = GMTTIMESTAMP '2012-10-11 20:40:41.723' (GMTTIMESTAMP)
(0x03000000):Priority = 0 (INTEGER)
(0x03000000):ReplyIdentifier = X'414d5120514d424b5244303120202020402d44502114b89c' (BLOB)
(0x03000000):ReplyProtocol = 'MQ' (CHARACTER)
(0x03000000):Topic = NULL
(0x03000000):ContentType = '' (CHARACTER)
)
(0x01000010):XMLNS = ( ['xmlns' : 0x149758224]
(0x05000018): = (
(0x02000000): = '' (CHARACTER)
(0x06000011): = '1.0' (CHARACTER)
(0x06000012): = 'UTF-8' (CHARACTER)
)
(0x01000000)http://schemas.xmlsoap.org/soap/envelope/:Envelope = (
(0x07000012)xmlns:SOAP-ENV = 'http://schemas.xmlsoap.org/soap/envelope/' (CHARACTER)
(0x07000012)xmlns:xsi = 'http://www.w3.org/2001/XMLSchema-instance' (CHARACTER)
(0x07000012)xmlns:xsd = 'http://www.w3.org/2001/XMLSchema' (CHARACTER)
(0x01000000)http://schemas.xmlsoap.org/soap/envelope/:Header = (
(0x07000012)xmlns:cfg_hdr = 'http://www.citizensbank.com/schemas/CFX/' (CHARACTER)
(0x01000000)http://www.co.com/schemas/CFX/:MessageHeader = (
(0x01000000)http://www.co.com/schemas/CFX/:ErrorList = (
(0x01000000)http://www.co.com/schemas/CFX/:Status = (
(0x02000000): = '2' (CHARACTER)
)
)
)
)
)
(0x01000000):soap_env:Envelope = (
(0x01000000):soap_env:Header = (
(0x01000000):cfg_hdr:MessageHeader = (
(0x01000000):cfg_hdr:ErrorList = (
(0x01000000):cfg_hdr:Error = (
(0x01000000):cfg_hdr:Context = (
(0x02000000): = 'serviceDelivery@alltel.com' (CHARACTER)
)
(0x01000000):cfg_hdr:SeverityCode = (
(0x02000000): = 'A' (CHARACTER)
)
(0x01000000):cfg_hdr:Severity = (
(0x02000000): = 'Abend' (CHARACTER)
)
(0x01000000):cfg_hdr:Code = (
(0x02000000): = ' YA88' (CHARACTER)
)
(0x01000000):cfg_hdr:Desc = (
(0x02000000): = ' YA88 ITR/TTR NOT FOUND OR INVALID' (CHARACTER)
)
)
)
(0x01000000):cfg_hdr:Service = (
(0x01000000):cfg_hdr:ServiceName = (
(0x02000000): = 'getCustConsLoanLoanAcctsRq' (CHARACTER)
)
(0x01000000):cfg_hdr:MessageType = (
(0x02000000): = 'Response' (CHARACTER)
)
)
(0x01000000):cfg_hdr:From = (
(0x01000000):cfg_hdr:PartyId = (
(0x02000000): = '06-530-9544' (CHARACTER)
)
(0x01000000):cfg_hdr:CostCenter = (
(0x02000000): = 'Unknown' (CHARACTER)
)
(0x01000000):cfg_hdr:System = (
(0x01000000):cfg_hdr:Application = (
(0x02000000): = 'serviceDelivery@alltel.com' (CHARACTER)
)
(0x01000000):cfg_hdr:Version = (
(0x02000000): = 'V1R0M0' (CHARACTER)
)
)
)
(0x01000000):cfg_hdr:UserSession = (
(0x01000000):cfg_hdr:SignonRole = (
(0x02000000): = 'Unknown' (CHARACTER)
)
(0x01000000):cfg_hdr:LogonId = (
(0x02000000): = 'N016438' (CHARACTER)
)
(0x01000000):cfg_hdr:SessionId = (
(0x02000000): = '00010000' (CHARACTER)
)
(0x01000000):cfg_hdr:CustId = (
(0x01000000):cfg_hdr:SPName = (
(0x02000000): = 'co.com' (CHARACTER)
)
(0x01000000):cfg_hdr:CustPermId = (
(0x02000000): = 'Loan Accounts' (CHARACTER)
)
(0x01000000):cfg_hdr:CustLogonId = (
(0x02000000): = 'N00000' (CHARACTER)
)
)
)
(0x01000000):cfg_hdr:Performance = (
(0x01000000):cfg_hdr:RqStartTime = (
(0x02000000): = '2012091812-25-59.001' (CHARACTER)
)
(0x01000000):cfg_hdr:PerfData = (
(0x01000000):cfg_hdr:SvcPvd = (
(0x01000000):cfg_hdr:Context = (
(0x02000000): = 'serviceDelivery@alltel.com' (CHARACTER)
)
(0x01000000):cfg_hdr:ServiceName = (
(0x02000000): = 'getCustConsLoanLoanAcctsRq' (CHARACTER)
)
(0x01000000):cfg_hdr:ElapsedTime = (
(0x02000000): = 8 (INTEGER)
)
)
(0x01000000):cfg_hdr:SvcPvd = (
(0x01000000):cfg_hdr:Context = (
(0x02000000): = 'messagebroker@citizensbank.com' (CHARACTER)
)
(0x01000000):cfg_hdr:ServiceName = (
(0x02000000): = 'getCustConsLoanLoanAcctsRq' (CHARACTER)
)
(0x01000000):cfg_hdr:BrkRqStartTime = (
(0x02000000): = 340144826645.000 (DECIMAL)
)
(0x01000000):cfg_hdr:BrkRqEndTime = (
(0x02000000): = 340144826646.000 (DECIMAL)
)
(0x01000000):cfg_hdr:BrkRqElapsedTime = (
(0x02000000): = 1000 (INTEGER)
)
(0x01000000):cfg_hdr:BrkRsEndTime = (
(0x02000000): = '340144826.926' (CHARACTER)
)
)
)
)
)
)
)
)
) |
|
Back to top |
|
 |
EricCox |
Posted: Thu Oct 11, 2012 12:51 pm Post subject: Flow of Nodes |
|
|
Master
Joined: 08 Apr 2011 Posts: 292
|
Here is the flow:
MQInput>>>RouteToLabel>>>Label>>>Subflow>>>Trace>>>HTTPReply
This trace never picks anything up...not sure why.
Subflow
Input>>>ResetContentDescriptor>>>Compute>>>Trace>>>Output
The trace shown is from this trace node in the subflow.
The subflow is getting values from the COBOL message set, is laying down the ESQL into SOAP output. I used SOAP XML Declarations exactly as I have working in another Label off of the RouteToLabel above. |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu Oct 11, 2012 3:44 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Looks like you have a SOAP:Envelope and a SOAP:Header but no SOAP:Body.
Also it looks like you might be trying to propagate as SOAP:Fault....
Make sure your httpReply code is 500.... and not 200
Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
NealM |
Posted: Thu Oct 11, 2012 9:35 pm Post subject: |
|
|
 Master
Joined: 22 Feb 2011 Posts: 230 Location: NC or Utah (depends)
|
Eric, remind me. Are you the person who is working on a Broker that is so downlevel that your Toolkit doesn't have a WebServices container with a SOAPEnvelope Node in it?
Geez, I gave you the ESQL code to properly build a SOAP envelope and body back on Sept 13 in your prior Cannot Retrieve HTTPRequestIdentifier topic . Go recheck that; It looks like you added extraneous junk.
http://www.mqseries.net/phpBB2/viewtopic.php?t=62174&postdays=0&postorder=asc&start=15 |
|
Back to top |
|
 |
smdavies99 |
Posted: Fri Oct 12, 2012 12:31 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Quote: |
Are you the person who is working on a Broker that is so downlevel that your Toolkit doesn't have a WebServices container with a SOAPEnvelope Node in it?
|
sometimes the only way to make a 'SOAP' message work is to use an HTTP Node.
I have just that situation here. The bit of kit I'm talking to says it uses a webservice interface. The sad thing is that the devs of said kit have never heard of things like
WSDL
xsd validators
So I'm left with sending a message over HTTP that uses a soap container but isn't a SOAP message as the rest of us know it. _________________ 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 |
|
 |
NealM |
Posted: Fri Oct 12, 2012 4:41 am Post subject: |
|
|
 Master
Joined: 22 Feb 2011 Posts: 230 Location: NC or Utah (depends)
|
smdavies, you do know that you can use the SOAPExtract and SOAPEnvelope Nodes with your HTTPInput and HTTPReply (and Request) Nodes to take care of removing/creating the SOAP envelope don't you? (that was their original purpose back when they were just ain a support pac, old ia9o) Then All you need to deal with in your ESQL is the body. See the same ref as above but go to my comments on page 1 |
|
Back to top |
|
 |
lancelotlinc |
Posted: Fri Oct 12, 2012 5:07 am Post subject: |
|
|
 Jedi Knight
Joined: 22 Mar 2010 Posts: 4941 Location: Bloomington, IL USA
|
smdavies99 wrote: |
sometimes the only way to make a 'SOAP' message work is to use an HTTP Node. I have just that situation here....So I'm left with sending a message over HTTP that uses a soap container but isn't a SOAP message as the rest of us know it. |
I cannot imagine this. I've not encountered any SOAP constructs that cannot be sent using the SOAP nodes in Broker.
Perhaps your not using the nodes correctly? _________________ http://leanpub.com/IIB_Tips_and_Tricks
Save $20: Coupon Code: MQSERIES_READER |
|
Back to top |
|
 |
mqjeff |
Posted: Fri Oct 12, 2012 5:25 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
I think both nealm and lancelotlinc have missed the single quotes that smdavies99 put around 'SOAP'.
To paraphrase, 'It's SOAP, Jim, but not as we know it'.
That is, I believe that smadavies99 is saying that his developers have decided that sending XML over HTTP counts as using SOAP, as long as some random element in the XML document is named 'envelope', and that any closer resemblance to the official SOAP standards is purely coincidental. |
|
Back to top |
|
 |
lancelotlinc |
Posted: Fri Oct 12, 2012 5:33 am Post subject: |
|
|
 Jedi Knight
Joined: 22 Mar 2010 Posts: 4941 Location: Bloomington, IL USA
|
Ok, I could see that happening. mgk and other IBM developers have done an outstanding job with the SOAP nodes. When the SOAP nodes are used as designed, they work flawlessly. This implies that the SOAP constructs are compliant. If you use random XML stanzas rather than compliant SOAP constructs, all bets are off, and no wonder it doesn't work. _________________ http://leanpub.com/IIB_Tips_and_Tricks
Save $20: Coupon Code: MQSERIES_READER |
|
Back to top |
|
 |
EricCox |
Posted: Fri Oct 12, 2012 6:35 am Post subject: Back Version - Yes |
|
|
Master
Joined: 08 Apr 2011 Posts: 292
|
Yes,
I am the one you assisted with building a soap message manually. Unfortunately we are on Message Broker 6.0.0.9 and do not have access to the SOAP Nodes and Web Service toolkit folder.
You are correct that there is no SOAP Body. I can try adding that. Doe MB 6.0.0.9 check for a completely valid SOAP Body in the message even though that version of MB has no SOAP awareness?
In the other flow that you helped me with I am building a valid SOAP Compliant message with fully qualified envelope/header/body and namespace qualified header elements and declarations in the envelope/header/body.
Let me try to add a Body element in the output and see if that works. |
|
Back to top |
|
 |
mqjeff |
Posted: Fri Oct 12, 2012 6:39 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
I would suggest you use SOAPUI or some other standalone SOAP compliant tool to create a sample message. Then send this to an HTTPInput node deployed in your Broker using the XMLNSC parser. Then pass the logical message tree to a Trace node.
This should give you enough information on what a correct soap message tree needs to look like in Broker v6.
Then you should complain to your boss about how much harassment and humiliation you are having to put up with here on mqseries.net, and explain that if you were using a supported version of Broker, you would be able to ask IBM for official support, and receive proper customer service rather than lip service from cranky random strangers on the internet. |
|
Back to top |
|
 |
NealM |
Posted: Fri Oct 12, 2012 6:47 am Post subject: |
|
|
 Master
Joined: 22 Feb 2011 Posts: 230 Location: NC or Utah (depends)
|
Quote: |
If you use random XML stanzas rather than compliant SOAP constructs, all bets are off, and no wonder it doesn't work. |
Random schmandom! Don't forget that the HTTP Nodes predate the SOAP Nodes by several WMB versions/releases, and we were doing valid webservices with SOAP structures waaaay back in Broker 5. There may be several reasons to continue doing so pre-MB8, such as the possible need to spread instances of a very busy flow across more than one EG without adding a load balancing sprayer someplace.
Quote: |
You are correct that there is no SOAP Body. I can try adding that. Doe MB 6.0.0.9 check for a completely valid SOAP Body in the message even though that version of MB has no SOAP awareness? |
Look, your Trace Node output says you have a mess in Root. Stick a Trace at the same point in your other working flow and compare. Then compare your ESQL. |
|
Back to top |
|
 |
|