Author |
Message
|
akir |
Posted: Fri Mar 28, 2008 9:35 am Post subject: CWF Logical Tree - Message Definition Mismatch |
|
|
 Acolyte
Joined: 28 Jun 2007 Posts: 51
|
Hello All,
I have a Target message set generated from Cobol Copy Book.
To one of the type in the Message ,I have assigned N cardinality as (-1).
I have an XML message from Source which is mapped onto this Structure.
The output from Debug Perspective is same as Expected Result but the MQOutput Node is throwing the error "CWF Logical Tree - Message Definition Mismatch" .
In the ESQL Code before this MQOutput node, I have manually set sizes required for target Structure.(I think this should be taken care by Message Set itself...However Iam setting it manually....)
The entire Exception tree is shown below.
Thanks and regards,
Anand Kiran Sade.
Code: |
ExceptionList
RecoverableException
File = F:\\build\\S600_P\\src\\DataFlowEngine\\ImbDataFlowNode.cpp
Line = 616
Function = ImbDataFlowNode::createExceptionList
Type = ComIbmMQInputNode
Name = com/mck/jnsnso/MF125_DTC_FEOP_JNSNSO_MF#FCMComposite_1_1
Label = com.mck.jnsnso.MF125_DTC_FEOP_JNSNSO_MF.JNSNSO.DTC.OUTBOUND.SPEC.QA
Catalog = BIPv600
Severity = 3
Number = 2230
Text = Node throwing exception
RecoverableException
File = F:\\build\\S600_P\\src\\DataFlowEngine\\ImbMqOutputNode.cpp
Line = 782
Function = ImbMqOutputNode::evaluate
Type = ComIbmMQOutputNode
Name = com/mck/jnsnso/MF125_DTC_FEOP_JNSNSO_MF#FCMComposite_1_2
Label = com.mck.jnsnso.MF125_DTC_FEOP_JNSNSO_MF.JNSNSO.FEOP.INBOUND.SPEC.QA
Catalog = BIPv600
Severity = 3
Number = 2230
Text = Caught exception and rethrowing
ParserException
File = F:\\build\\S600_P\\src\\MTI\\MTIforBroker\\MtiImbParser2\\MtiImbParser.cpp
Line = 1711
Function = MtiImbParser::refreshBitStreamFromElements - 9 par
Type = ComIbmComputeNode
Name = com/mck/jnsnso/MF125_DTC_FEOP_JNSNSO_MF#FCMComposite_1_3
Label = com.mck.jnsnso.MF125_DTC_FEOP_JNSNSO_MF.Map_DTC_To_FEOP
Catalog = BIPv600
Severity = 3
Number = 5286
Text = ImbRecoverableException caught from worker when attempting to write out the bitstream.
Insert
Type = 5
Text = BD127_FEOP_JNSNSO_MS
Insert
Type = 2
Text = 1
Insert
Type = 5
Text = CWF1
Insert
Type = 5
Text = msg_TOFEOP
ParserException
File = F:\\build\\S600_P\\src\\cpi\\pwf\\cwf\\cwfworker.cpp
Line = 415
Function = CWFWorker::write
Type =
Name =
Label =
Catalog = BIPv600
Severity = 3
Number = 5167
Text = CWF General Error
Insert
Type = 2
Text = 0
Insert
Type = 5
Text = CWFWorker::write
Insert
Type = 5
Text = msg_TOFEOP
ParserException
File = F:\\build\\S600_P\\src\\cpi\\pwf\\cwf\\cwfmessage.cpp
Line = 618
Function = CMessage::write
Type =
Name =
Label =
Catalog = BIPv600
Severity = 3
Number = 5350
Text = CWF Writing error
Insert
Type = 2
Text = 0
Insert
Type = 5
Text = CWFWorker::parseNext
Insert
Type = 5
Text = msg_TOFEOP
Insert
Type = 5
Text = /msg_TOFEOP/TRAILER
ParserException
File = F:\\build\\S600_P\\src\\cpi\\pwf\\cwf\\cwfcontext.cpp
Line = 323
Function = CContext::CheckDefaultValue
Type =
Name =
Label =
Catalog = BIPv600
Severity = 3
Number = 5344
Text = CWF Logical Tree - Message Definition Mismatch
Insert
Type = 5
Text = msg_TOFEOP
Insert
Type = 5
Text = 79^RECORDTYPE
|
Last edited by akir on Fri Mar 28, 2008 11:38 am; edited 1 time in total |
|
Back to top |
|
 |
Jenney |
Posted: Fri Mar 28, 2008 10:18 am Post subject: |
|
|
Voyager
Joined: 25 Apr 2007 Posts: 83 Location: Melbourne
|
Did you check what data you are getting in that field RECORDTYPE, does it match to your defined data type. |
|
Back to top |
|
 |
wbi_telecom |
Posted: Fri Mar 28, 2008 10:22 am Post subject: |
|
|
 Disciple
Joined: 15 Feb 2006 Posts: 188 Location: Harrisburg, PA
|
Are you changing the message set that you have created from the copybook for cardinality? We generally do not change it. If the copybook has "occurs" for any field, its already taken care off while importing.
The error indicates that the message that you create does not match the message set. The error seems to be in 79^RECORDTYPE field in the msg_TOFEOP message. Put a trace node and see how your message looks like in the trace, compare it with the message set layout.
Cheers, |
|
Back to top |
|
 |
akir |
Posted: Fri Mar 28, 2008 11:21 am Post subject: |
|
|
 Acolyte
Joined: 28 Jun 2007 Posts: 51
|
wbi_telecom wrote: |
Are you changing the message set that you have created from the copybook for cardinality? |
Yes that is what I am doing exactly.
How can I place cardinality for N times in Cobol Copy Book
I know that these are the ways to do that.
Code: |
DETAILS OCCURS 1 TO 100 TIMES DEPENDING ON H1-DET-COUNT. |
Code: |
DETAILS OCCURS 1 TO 100 TIMES |
But the requirement is that the output cardinality should depend on the cardinality of Input Structure.
For Ex:If I have 2 items in Input --> I should have 2 DETAILS in Output. |
|
Back to top |
|
 |
wbi_telecom |
Posted: Fri Mar 28, 2008 11:32 am Post subject: |
|
|
 Disciple
Joined: 15 Feb 2006 Posts: 188 Location: Harrisburg, PA
|
As I said you should not be changing anything in the message set after the copybook is imported successfully. When you map the XML message loop thru the number of instaces and map them to the respective copybook fields. CWF message is a fixed length message so if some field occurs 100 times...it will occur 100 times regardless of what you have in your incoming message.
Hope it clarifies....
Cheers, |
|
Back to top |
|
 |
akir |
Posted: Fri Mar 28, 2008 11:45 am Post subject: |
|
|
 Acolyte
Joined: 28 Jun 2007 Posts: 51
|
wbi_telecom wrote: |
if some field occurs 100 times...it will occur 100 times regardless of what you have in your incoming message.
|
I cannot for sure say that it occurs a fixed number of times.( like 100)
It depends on the cardinality of Input Structure.
For Ex:If I have 2 items in Input --> I should have 2 DETAILS in Output.
Thanks and Regards,
Anand Kiran Sade |
|
Back to top |
|
 |
wbi_telecom |
Posted: Fri Mar 28, 2008 12:02 pm Post subject: |
|
|
 Disciple
Joined: 15 Feb 2006 Posts: 188 Location: Harrisburg, PA
|
I know that your input cardinality will be anything between 1 and 100 but copybook works in a differnt way...
There is a difference between XML and CWF messages. CWF messages MUST have the number of bytes as present in the copybook . If you have 2 fields populated then the 98 remaining will have defaults in them.(we use spaces or zeros depending on datatype). Unless your message matches the copybook layout...you are going to get the CWF mismatch error.
Here is what I would do
1) Import the copybook with occurs in it
2)While importing set default values to null fields. (last screen in importer)
3)Map the number I have in the input to output fields
4) The broker will set the others to default
if you want to reduce the size of your output message, You might want to talk to mainframe guys and ask them about "Occurs depending". What this means is your cardinality on mainframe will be part of a field in the copybook which occurs before the repeating structure.....you need to have broker 6.0 or higher for this...
Cheers, |
|
Back to top |
|
 |
kimbert |
Posted: Fri Mar 28, 2008 12:30 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
the requirement is that the output cardinality should depend on the cardinality of Input Structure.
For Ex:If I have 2 items in Input --> I should have 2 DETAILS in Output. |
You have two options:
a) If the repeating structure is the final structure in the message, then you can set maxOccurs to -1 ( i.e. unbounded ).
b) Otherwise, you must use OCCURS DEPENDING ON, as wbi_telecom suggests.
This is just common sense, by the way. It is obviously impossible to parse a sequence of fixed-length fields without some way of knowing how many times each field occurs. a) uses the end of the bitstream to indicate the final occurence. b) uses a numeric field earlier in the message. |
|
Back to top |
|
 |
|