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 » DFDL padding issue

Post new topic  Reply to topic
 DFDL padding issue « View previous topic :: View next topic » 
Author Message
nelson
PostPosted: Wed Nov 27, 2013 11:22 am    Post subject: DFDL padding issue Reply with quote

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
View user's profile Send private message
kimbert
PostPosted: Wed Nov 27, 2013 1:26 pm    Post subject: Reply with quote

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
View user's profile Send private message
nelson
PostPosted: Wed Nov 27, 2013 2:37 pm    Post subject: Reply with quote

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
View user's profile Send private message
kimbert
PostPosted: Wed Nov 27, 2013 3:29 pm    Post subject: Reply with quote

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
View user's profile Send private message
nelson
PostPosted: Thu Nov 28, 2013 7:44 am    Post subject: Reply with quote

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
View user's profile Send private message
kimbert
PostPosted: Thu Nov 28, 2013 8:24 am    Post subject: Reply with quote

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
View user's profile Send private message
nelson
PostPosted: Thu Nov 28, 2013 9:17 am    Post subject: Reply with quote

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:

Code:
$GLB-SOURCE != ''


Not the best way, but works in all the cases mentioned above.

Thanks again for your help!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » DFDL padding issue
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.