Author |
Message
|
nelson |
Posted: Wed Nov 27, 2013 11:22 am Post subject: DFDL padding issue |
|
|
 Partisan
Joined: 02 Oct 2012 Posts: 313
|
Hi all,
Working on WMB 8.0.0.1.
I have this DFDL structure (fixed length):
Code: |
DataType
body
FIELD1 (3 characters)
FIELD2 (3 characters) |
In a mapping node the output generated is DataType. If the output message don´t have FIELD1 for example, the broker fills that field with 0's (that´s the padding char) when the message is serialized. But if I map FIELD1 with an empty string, the broker does not generate 0´s when the message is serialized.
I have tried specifying a default value but does not work.
I don´t know if there is any DFDL property that allows this.
Any hint on this is very appreciated.
Thanks in advance. |
|
Back to top |
|
 |
kimbert |
Posted: Wed Nov 27, 2013 1:26 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
This sounds like a known defect. You may need IC97521 which is included in WMB v8.0.0.3. _________________ Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too. |
|
Back to top |
|
 |
nelson |
Posted: Wed Nov 27, 2013 2:37 pm Post subject: |
|
|
 Partisan
Joined: 02 Oct 2012 Posts: 313
|
kimbert wrote: |
This sounds like a known defect. You may need IC97521 which is included in WMB v8.0.0.3. |
Thanks kimbert. We have tested the flow in a WMB 8.0.0.3 but the problem remains the same.
We are working on WMB Toolkit 8.0.0.2. Does this matter?
Thanks a lot for your help. |
|
Back to top |
|
 |
kimbert |
Posted: Wed Nov 27, 2013 3:29 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
The toolkit version will not affect the runtime behaviour of the DFDL parser.
Put a Trace node with pattern ${Root} before the output node. Post the result ( in [c o d e] tags please ). _________________ Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too. |
|
Back to top |
|
 |
nelson |
Posted: Thu Nov 28, 2013 7:44 am Post subject: |
|
|
 Partisan
Joined: 02 Oct 2012 Posts: 313
|
kimbert wrote: |
The toolkit version will not affect the runtime behaviour of the DFDL parser.
Put a Trace node with pattern ${Root} before the output node. Post the result ( in [c o d e] tags please ). |
Thanks kimbert,
We have discovered a few things:
First, in the following examples we are dealing the element GLB-SOURCE.
1. If the DFDL tag is not present before the output node, the field is filled with the padding char (in this case 3 spaces). This happens when the target element is not wired in the mapping node.
Here is the trace (please note that the GLB-SOURCE tag does not appear just before the output node):
Code: |
Value):Persistence = FALSE (BOOLEAN)
(0x03000000:NameValue):CreationTime = GMTTIMESTAMP '2013-11-28 15:18:33.470' (GMTTIMESTAMP)
(0x03000000:NameValue):ExpirationTime = -1 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):ReplyIdentifier = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):ReplyProtocol = 'MQ' (CHARACTER)
(0x03000000:NameValue):Topic = NULL
(0x03000000:NameValue):ContentType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceToken = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourcePassword = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceIssuedBy = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedType = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedToken = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedPassword = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedIssuedBy = '' (CHARACTER)
)
(0x01000000:Name):MQMD = ( ['MQHMD' : 0x10ccfa8]
(0x03000000:NameValue):SourceQueue = 'Q1' (CHARACTER)
(0x03000000:NameValue):Transactional = TRUE (BOOLEAN)
(0x03000000:NameValue):Encoding = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId = 1208 (INTEGER)
(0x03000000:NameValue):Format = 'MQSTR ' (CHARACTER)
(0x03000000:NameValue):Version = 2 (INTEGER)
(0x03000000:NameValue):Report = 0 (INTEGER)
(0x03000000:NameValue):MsgType = 8 (INTEGER)
(0x03000000:NameValue):Expiry = -1 (INTEGER)
(0x03000000:NameValue):Feedback = 0 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):Persistence = 0 (INTEGER)
(0x03000000:NameValue):MsgId = X'414d51204d4238514d475220202020200b5d975220004a02' (BLOB)
(0x03000000:NameValue):CorrelId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):BackoutCount = 0 (INTEGER)
(0x03000000:NameValue):ReplyToQ = ' ' (CHARACTER)
(0x03000000:NameValue):ReplyToQMgr = 'MB8QMGR ' (CHARACTER)
(0x03000000:NameValue):UserIdentifier = 'admin ' (CHARACTER)
(0x03000000:NameValue):AccountingToken = X'1601051500000092e03c779b0bc11e75b97554ee03000000000000000000000b' (BLOB)
(0x03000000:NameValue):ApplIdentityData = ' ' (CHARACTER)
(0x03000000:NameValue):PutApplType = 11 (INTEGER)
(0x03000000:NameValue):PutApplName = 'MQ701\java\jre\bin\javaw.exe' (CHARACTER)
(0x03000000:NameValue):PutDate = DATE '2013-11-28' (DATE)
(0x03000000:NameValue):PutTime = GMTTIME '15:18:33.470' (GMTTIME)
(0x03000000:NameValue):ApplOriginData = ' ' (CHARACTER)
(0x03000000:NameValue):GroupId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):MsgSeqNumber = 1 (INTEGER)
(0x03000000:NameValue):Offset = 0 (INTEGER)
(0x03000000:NameValue):MsgFlags = 0 (INTEGER)
(0x03000000:NameValue):OriginalLength = -1 (INTEGER)
)
(0x01000000:Name):DFDL = ( ['dfdl' : 0xf3aa18]
(0x01000000:Name):CWF = (
(0x01000000:Name):body = (
(0x03000000:NameValue):ISPEC = 'FCT' (CHARACTER)
)
)
)
) |
2. If the DFDL tag is present before the output node with no value (no empty string), the field is not filled with the padding char. This happens when we perform a mapping with the element wired with a move operation, but in the source we don´t include the GLB-SOURCE element at all. It generates the tag with no value.
Code: |
( ['MQROOT' : 0xf3aa18]
(0x01000000:Name):Properties = ( ['MQPROPERTYPARSER' : 0x239b01f8]
(0x03000000:NameValue):MessageSet = '' (CHARACTER)
(0x03000000:NameValue):MessageType = '{}:CWF' (CHARACTER)
(0x03000000:NameValue):MessageFormat = '' (CHARACTER)
(0x03000000:NameValue):Encoding = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId = 1208 (INTEGER)
(0x03000000:NameValue):Transactional = TRUE (BOOLEAN)
(0x03000000:NameValue):Persistence = FALSE (BOOLEAN)
(0x03000000:NameValue):CreationTime = GMTTIMESTAMP '2013-11-28 15:24:41.110' (GMTTIMESTAMP)
(0x03000000:NameValue):ExpirationTime = -1 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):ReplyIdentifier = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):ReplyProtocol = 'MQ' (CHARACTER)
(0x03000000:NameValue):Topic = NULL
(0x03000000:NameValue):ContentType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceToken = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourcePassword = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceIssuedBy = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedType = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedToken = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedPassword = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedIssuedBy = '' (CHARACTER)
)
(0x01000000:Name):MQMD = ( ['MQHMD' : 0x10cdac8]
(0x03000000:NameValue):SourceQueue = 'Q1' (CHARACTER)
(0x03000000:NameValue):Transactional = TRUE (BOOLEAN)
(0x03000000:NameValue):Encoding = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId = 1208 (INTEGER)
(0x03000000:NameValue):Format = 'MQSTR ' (CHARACTER)
(0x03000000:NameValue):Version = 2 (INTEGER)
(0x03000000:NameValue):Report = 0 (INTEGER)
(0x03000000:NameValue):MsgType = 8 (INTEGER)
(0x03000000:NameValue):Expiry = -1 (INTEGER)
(0x03000000:NameValue):Feedback = 0 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):Persistence = 0 (INTEGER)
(0x03000000:NameValue):MsgId = X'414d51204d4238514d475220202020200b5d975220007102' (BLOB)
(0x03000000:NameValue):CorrelId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):BackoutCount = 0 (INTEGER)
(0x03000000:NameValue):ReplyToQ = ' ' (CHARACTER)
(0x03000000:NameValue):ReplyToQMgr = 'MB8QMGR ' (CHARACTER)
(0x03000000:NameValue):UserIdentifier = 'admin ' (CHARACTER)
(0x03000000:NameValue):AccountingToken = X'1601051500000092e03c779b0bc11e75b97554ee03000000000000000000000b' (BLOB)
(0x03000000:NameValue):ApplIdentityData = ' ' (CHARACTER)
(0x03000000:NameValue):PutApplType = 11 (INTEGER)
(0x03000000:NameValue):PutApplName = 'MQ701\java\jre\bin\javaw.exe' (CHARACTER)
(0x03000000:NameValue):PutDate = DATE '2013-11-28' (DATE)
(0x03000000:NameValue):PutTime = GMTTIME '15:24:41.110' (GMTTIME)
(0x03000000:NameValue):ApplOriginData = ' ' (CHARACTER)
(0x03000000:NameValue):GroupId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):MsgSeqNumber = 1 (INTEGER)
(0x03000000:NameValue):Offset = 0 (INTEGER)
(0x03000000:NameValue):MsgFlags = 0 (INTEGER)
(0x03000000:NameValue):OriginalLength = -1 (INTEGER)
)
(0x01000000:Name):DFDL = ( ['dfdl' : 0xf3ac80]
(0x01000000:Name):CWF = (
(0x01000000:Name):body = (
(0x01000000:Name ):GLB-SOURCE =
(0x03000000:NameValue):ISPEC = 'FCT' (CHARACTER)
)
)
)
) |
3. If the DFDL tag is present with an empty string, the field is filled with the padding char. This happens when the source (before the mapping) includes the tag with an empty string.
Code: |
( ['MQROOT' : 0xf3aa18]
(0x01000000:Name):Properties = ( ['MQPROPERTYPARSER' : 0x239b01f8]
(0x03000000:NameValue):MessageSet = '' (CHARACTER)
(0x03000000:NameValue):MessageType = '{}:CWF' (CHARACTER)
(0x03000000:NameValue):MessageFormat = '' (CHARACTER)
(0x03000000:NameValue):Encoding = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId = 1208 (INTEGER)
(0x03000000:NameValue):Transactional = TRUE (BOOLEAN)
(0x03000000:NameValue):Persistence = FALSE (BOOLEAN)
(0x03000000:NameValue):CreationTime = GMTTIMESTAMP '2013-11-28 15:33:03.140' (GMTTIMESTAMP)
(0x03000000:NameValue):ExpirationTime = -1 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):ReplyIdentifier = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):ReplyProtocol = 'MQ' (CHARACTER)
(0x03000000:NameValue):Topic = NULL
(0x03000000:NameValue):ContentType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceType = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceToken = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourcePassword = '' (CHARACTER)
(0x03000000:NameValue):IdentitySourceIssuedBy = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedType = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedToken = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedPassword = '' (CHARACTER)
(0x03000000:NameValue):IdentityMappedIssuedBy = '' (CHARACTER)
)
(0x01000000:Name):MQMD = ( ['MQHMD' : 0x10cdac8]
(0x03000000:NameValue):SourceQueue = 'Q1' (CHARACTER)
(0x03000000:NameValue):Transactional = TRUE (BOOLEAN)
(0x03000000:NameValue):Encoding = 546 (INTEGER)
(0x03000000:NameValue):CodedCharSetId = 1208 (INTEGER)
(0x03000000:NameValue):Format = 'MQSTR ' (CHARACTER)
(0x03000000:NameValue):Version = 2 (INTEGER)
(0x03000000:NameValue):Report = 0 (INTEGER)
(0x03000000:NameValue):MsgType = 8 (INTEGER)
(0x03000000:NameValue):Expiry = -1 (INTEGER)
(0x03000000:NameValue):Feedback = 0 (INTEGER)
(0x03000000:NameValue):Priority = 0 (INTEGER)
(0x03000000:NameValue):Persistence = 0 (INTEGER)
(0x03000000:NameValue):MsgId = X'414d51204d4238514d475220202020200b5d97522000a202' (BLOB)
(0x03000000:NameValue):CorrelId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):BackoutCount = 0 (INTEGER)
(0x03000000:NameValue):ReplyToQ = ' ' (CHARACTER)
(0x03000000:NameValue):ReplyToQMgr = 'MB8QMGR ' (CHARACTER)
(0x03000000:NameValue):UserIdentifier = 'admin ' (CHARACTER)
(0x03000000:NameValue):AccountingToken = X'1601051500000092e03c779b0bc11e75b97554ee03000000000000000000000b' (BLOB)
(0x03000000:NameValue):ApplIdentityData = ' ' (CHARACTER)
(0x03000000:NameValue):PutApplType = 11 (INTEGER)
(0x03000000:NameValue):PutApplName = 'MQ701\java\jre\bin\javaw.exe' (CHARACTER)
(0x03000000:NameValue):PutDate = DATE '2013-11-28' (DATE)
(0x03000000:NameValue):PutTime = GMTTIME '15:33:03.140' (GMTTIME)
(0x03000000:NameValue):ApplOriginData = ' ' (CHARACTER)
(0x03000000:NameValue):GroupId = X'000000000000000000000000000000000000000000000000' (BLOB)
(0x03000000:NameValue):MsgSeqNumber = 1 (INTEGER)
(0x03000000:NameValue):Offset = 0 (INTEGER)
(0x03000000:NameValue):MsgFlags = 0 (INTEGER)
(0x03000000:NameValue):OriginalLength = -1 (INTEGER)
)
(0x01000000:Name):DFDL = ( ['dfdl' : 0xf3ac80]
(0x01000000:Name):CWF = (
(0x01000000:Name):body = (
(0x03000000:NameValue):GLB-SOURCE = '' (CHARACTER)
(0x03000000:NameValue):ISPEC = 'FCT' (CHARACTER)
)
)
)
) |
The main discovery here is that if we perform a mapping but the source element is not included, message broker generates the element with no value.
If you have any idea on this is very appreciated.
Kind regards. |
|
Back to top |
|
 |
kimbert |
Posted: Thu Nov 28, 2013 8:24 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
This is definitely IC97521. I diagnosed and fixed it myself, and the symptoms are an exact match. And I was wrong - it's not included in 8.0.0.3.
You will need to either
a) ensure that there is a value for this element in the message tree ( even if it is only an empty string value )
or
b) wait for the next fix pack
or
c) open a ticket with IBM and request IC97521 _________________ Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too. |
|
Back to top |
|
 |
nelson |
Posted: Thu Nov 28, 2013 9:17 am Post subject: |
|
|
 Partisan
Joined: 02 Oct 2012 Posts: 313
|
kimbert wrote: |
This is definitely IC97521. I diagnosed and fixed it myself, and the symptoms are an exact match. And I was wrong - it's not included in 8.0.0.3.
You will need to either
a) ensure that there is a value for this element in the message tree ( even if it is only an empty string value )
or
b) wait for the next fix pack
or
c) open a ticket with IBM and request IC97521 |
kimbert, thanks a lot for your help. We are going to take the c) option.
We made a temporary fix: add a condition within the move component in the mapping node:
Not the best way, but works in all the cases mentioned above.
Thanks again for your help! |
|
Back to top |
|
 |
|