Author |
Message
|
lium |
Posted: Thu Dec 27, 2012 12:48 pm Post subject: How to get PARSE statement working with DFDL |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
I generated a DFDL schema, with MQInput node, I specify the "Input message parsing" properties of MQInput with the following value:
Message Domain: DFDL
Message Model: no value with greyed
Message: {}:DCPRMREC
Physical Format: no value with greyed
This works perfectly with the test data.
Now, I change the "Input message parsing" properties of MQInput to be BLOB, and want to get it working with PARSE statement,
I coded as the following:
CREATE LASTCHILD OF OutputLocalEnvironment.Message
DOMAIN('DFDL')
PARSE(structBlob,
0,
1208,
'',
'{}:DCPRMREC',
'',
RootBitStream);
However, I got exception:
ParserException
File:CHARACTER:F:\build\slot1\S800_P\src\MTI\MTIforBroker\DfdlParser\ImbDFDLDocHandler.cpp
Line:INTEGER:242
Function:CHARACTER:ImbDFDLDocHandler::getDFDLParser
Type:CHARACTER:
Name:CHARACTER:
Label:CHARACTER:
Catalog:CHARACTER:BIPmsgs
Severity:INTEGER:3
Number:INTEGER:5822
Text:CHARACTER:Cannot continue - messageTypeName is empty
PlEASE NOTE:
I used to work with message broker version 6, the message definition is insider message set with MRM domain, which worked perfect with the PARSE statement. However, We want to migrate the message set to message model in FDL.
So let me recap this:
Does any body knows how to get PARSE statement working with DFDL?
Any help would be great appreciated |
|
Back to top |
|
 |
lium |
Posted: Thu Dec 27, 2012 1:28 pm Post subject: |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
In WMB 8, reference, you can find example of create statement as the following:
DECLARE inCCSID INT InputProperties.CodedCharSetId;
DECLARE inEncoding INT InputProperties.Encoding;
DECLARE inBitStream BLOB ASBITSTREAM(InputRoot.XMLNSC, inEncoding, inCCSID);
CREATE LASTCHILD OF OutputRoot DOMAIN('MRM')
PARSE(inBitStream, inEncoding, inCCSID, 'DP3UK14002001',
'TestCase', 'XML1', options);
My question can be put also in this way:
1. Does CREATE statement support DOMAIN('DFDL')?
2. If yes, how should we pass the value for the message set, message type and message format for DFDL which does not have message set and message format any more?
Thanks, |
|
Back to top |
|
 |
lium |
Posted: Thu Dec 27, 2012 2:13 pm Post subject: |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
I turned on trace, and got:
2012-12-27 16:56:25.241796 6172 ParserException BIP5822E: The DFDL parser requires a valid document root.
The DFDL parser requires a valid document root, but the field was empty. DFDL parsing has stopped.
Possible causes are:
1. The document root has not been specified on the node.
2. The document root is not present in the Properties folder in the message tree.
3. The TYPE clause was not specified in ESQL for a CREATE ... PARSE statement.
4. The messageType parameter was not specified in Java for a createElementAsLastChildFromBitstream call.
Indeed, I specified the TYPE with value , not sure why it complains. |
|
Back to top |
|
 |
kimbert |
Posted: Sat Dec 29, 2012 12:33 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
Does CREATE statement support DOMAIN('DFDL')? |
yes - it supports all of the WMB parsers including DFDL.
It is possible that you have encountered a product defect. It is also possible that the info center is not helpful enough. Either way, I think a PMR would be appropriate. |
|
Back to top |
|
 |
lium |
Posted: Sat Dec 29, 2012 6:02 pm Post subject: |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
Thanks Kimbert.
I think this issue has been solved. |
|
Back to top |
|
 |
smdavies99 |
Posted: Sat Dec 29, 2012 10:59 pm Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
To help all of us in the future can you tell us how you solved the problem? _________________ 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 |
|
 |
lium |
Posted: Sun Dec 30, 2012 11:57 am Post subject: |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
My experience is the DFDL is little more picky than MRM domain.
I am not sure if it is not as mature as MRM domain.
So I used OutputRoot to store the result rather than OutputLocalEnvironment to solve this problem. |
|
Back to top |
|
 |
kimbert |
Posted: Sun Dec 30, 2012 1:46 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
My experience is the DFDL is little more picky than MRM domain. |
This sounds like potentially useful feedback - can you explain exactly what you mean by that?
Quote: |
I am not sure if it is not as mature as MRM domain. |
It is newer, but it is based on some very sound technical foundations. DFDL has advantages that MRM cannot compete with. For any v8 user the strategic choice is DFDL for new message flows that deal with non-XML data formats.
Quote: |
So I used OutputRoot to store the result rather than OutputLocalEnvironment to solve this problem. |
Hmmm - that should make exactly zero difference to anything. Are you 100% sure that you did not change something else at the same time? |
|
Back to top |
|
 |
fjb_saper |
Posted: Sun Dec 30, 2012 8:45 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Did he have a parser attached to OutputLocalEnvironment ?  _________________ MQ & Broker admin |
|
Back to top |
|
 |
lium |
Posted: Mon Dec 31, 2012 7:57 am Post subject: |
|
|
Disciple
Joined: 17 Jul 2002 Posts: 184
|
Yes, once I switched from the OutputLocalEnvironment to OutputRoot, everything is different.
The MRM has existed very long time, however, DFDL is so new, so it makes sense to me. |
|
Back to top |
|
 |
Vitor |
Posted: Mon Dec 31, 2012 9:27 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
lium wrote: |
Yes, once I switched from the OutputLocalEnvironment to OutputRoot, everything is different. |
No it isn't, or if it is it shouldn't be as kimbert points out.
lium wrote: |
The MRM has existed very long time, however, DFDL is so new, so it makes sense to me. |
You're the only one it makes sense to. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
RadhamaniRamadoss |
Posted: Thu Jun 13, 2013 1:33 am Post subject: |
|
|
Apprentice
Joined: 08 Oct 2009 Posts: 42
|
I have the same problem but with OutputRoot itself.
The esql code is as below,
(CARDINALITY(Environment.OriginalMessage.DFDL[]) > 0) THEN
SET OutputRoot.DFDL = Environment.OriginalMessage.DFDL;
SET OutputLocalEnvironment.Destination.MQ.DestinationData.queueName = Environment.ErrorHandler.Config.Retry.RetryQueue;
The error is "Text:CHARACTER:Cannot continue - messageTypeName is empty"
The same code works for MRM,
SET OutputRoot.MRM = Environment.OriginalMessage.MRM;
SET OutputLocalEnvironment.Destination.MQ.DestinationData.queueName = Environment.ErrorHandler.Config.Retry.RetryQueue;
Not sure how to fix this.Please help. |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu Jun 13, 2013 5:08 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Remember also the error line somewhere above where it complained about message root? MRM does not require a message root as a tag. DFDL does.
Same difference between XML and MRM
I know this sounds a bit esoteric. So try this:
declare a root element below the parser (document root) and try parse to that...  _________________ MQ & Broker admin |
|
Back to top |
|
 |
kimbert |
Posted: Thu Jun 13, 2013 8:18 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Which version are you using? Have you already updated to 8.0.0.2? |
|
Back to top |
|
 |
mqceries |
Posted: Tue Jun 18, 2013 1:35 pm Post subject: |
|
|
 Acolyte
Joined: 02 Dec 2011 Posts: 70
|
RadhamaniRamadoss wrote: |
I have the same problem but with OutputRoot itself.
The esql code is as below,
(CARDINALITY(Environment.OriginalMessage.DFDL[]) > 0) THEN
SET OutputRoot.DFDL = Environment.OriginalMessage.DFDL;
SET OutputLocalEnvironment.Destination.MQ.DestinationData.queueName = Environment.ErrorHandler.Config.Retry.RetryQueue;
The error is "Text:CHARACTER:Cannot continue - messageTypeName is empty"
The same code works for MRM,
SET OutputRoot.MRM = Environment.OriginalMessage.MRM;
SET OutputLocalEnvironment.Destination.MQ.DestinationData.queueName = Environment.ErrorHandler.Config.Retry.RetryQueue;
Not sure how to fix this.Please help. |
I hope the tree you are trying to copy have same DFDL, and secondly i believe you cant copy the DFDL to a DFDL like that, the way you are doing once debug you will be DFDL inside the DFDL and the file wont be written. We had the similar situation and i used this..
Offcourse there is every possible thing that i have understood this wrong and jumped in... if so pls correct.
Code: |
DELETE FIELD OutputRoot.DFDL.MSG_xxxxx;
SET OutputRoot.DFDL = rPack;
rPack is a reference to outputlocalenvironment.DFDL.Message. and both out put and this do have same DFDL
|
|
|
Back to top |
|
 |
|