|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
CWF Parser / writer error? |
« View previous topic :: View next topic » |
Author |
Message
|
MrSmith |
Posted: Tue May 13, 2008 1:32 am Post subject: CWF Parser / writer error? |
|
|
 Master
Joined: 20 Mar 2008 Posts: 215
|
Hi,
Below is the output of a trace for which i am intrigued
Broker V5 + CSD10 on Windows XP
As you will see the output tree shows a field BalanceBreakdownDetailsUnit
whose value and properties in the MRM are a 18 byte 6 virtual decimal places right justified (default for decimal) with '0' padding element whose value is 18 characters, so why does the CWF writer (output below) seem to have trimmed the initial zeros leaving 15 characters then left justify it and then what looks to me as to have added the 6 additional zeros to the right hand side thus making the field value to long for the element. If i do not generate this value and just create the element with 18 x 0 within the ESQL it works fine but if i substitute it for 18 x 1's it left justifies it again and fails.
trace output:
(0x01000021):MRM = (
(0x01000000):FINV535MsgRecordTDS = (
(0x03000000):SenderMasterRef = 'ABCDEFGHIJKLMNOP'
(0x03000000):CreationDate = '20020721'
(0x03000000):CreationTime = '083530'
(0x03000000):PreviousReference = 'ABCDEFGHIJKLMNOP'
(0x03000000):RelatedReference = 'ABCDEFGHIJKLMNOP'
(0x03000000):Pagenumber = '00001'
(0x03000000):LastPageIndicator = 'YES'
(0x03000000):Reference_35 = 'ABCDEFGHIJKLMNOPQRST123456789012345'
(0x03000000):StatementDate = '20020225'
(0x03000000):StatementTime = '000000'
(0x03000000):Frequency = 'YEAR'
(0x03000000):UpdateType = 'COMP'
(0x03000000):StatementBasis = 'CONT'
(0x03000000):ActivityIndicator = 'YES'
(0x03000000):AuditedIndicator = 'YES'
(0x03000000):AccountDetailIdent = 'ABCDEFGHIJKLMNOPQRST123456789012345'
(0x03000000):FungibleIndicator = 'YES'
(0x03000000):AggregateQuantityUnit = '000000001234123457'
(0x03000000):AvailableQuantityUnit = '000000000000000000'
(0x03000000):NotAvailableQuantityUnit = '000000000000000000'
(0x03000000):HoldingValue = '000000000628400'
(0x03000000):HoldingValueCurrencyCode = 'EUR'
(0x03000000):BookValue = '000000006283400'
(0x03000000):BookValueCurrencyCode = 'EUR'
(0x03000000):FinancialInstrumentIdent_1 = 'ISIN'
(0x03000000):FinancialInstrumentIdent_2 = 'US31333L82 '
(0x03000000):FinancialInstrumentIdent_3 = 'ABCDEFGMNOPQRST123456789012345 '
(0x03000000):FinancialInstrumentIdent_4 = 'ABCDEFGHIJST123456789012345 '
(0x03000000):PriceDetailsAmount = '000000666880000'
(0x03000000):PriceDetailsCurrency = 'EUR'
(0x03000000):PriceDetailsType = 'BIDE'
(0x03000000):ForeignExchangeDetailsUnitCurrency = 'USD'
(0x03000000):ForeignExchangeDetailsQuotedCurrency = 'USD'
(0x03000000):ForeignExchangeDetailsExchangeRate = '000000000600000'
(0x03000000):BalanceBreakdownDetailsUnit = '000123456789123457'
(0x03000000):BalanceBreakdownDetailsSubBalanceType = 'BLOK'
(0x03000000):SenderDN_XMLCounterParty = 'ou=efs,o=bbhcus3i,o=swift '
(0x03000000):Format_Indicator = 'X'
(0x03000000):CarriageReturnLineFeed = '
'
)
CWF writer error:
ConversionException BIP5507E: Data conversion failed: input data too long.
Input type : 'string'
Output type : 'external decimal'
Maximum expected length : 18
Data value : '123456789123457000000'
A data conversion during reading or writing of a message failed because the input data was too long for the output data type.
Have read that there is some conversion on external decimal types but why does it convert all the other decimals in this structure without issue, I have gone back to the message set and made sure the right justify is selected to ensure it wasn't trying to left justify the value and zero fill.
Thanks. |
|
Back to top |
|
 |
kimbert |
Posted: Tue May 13, 2008 3:28 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Must be logical<->physical education week...
Look in your message definition. What simple type does BalanceBreakdownDetailsUnit have? What ESQL type are you using when you set its value? |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue May 13, 2008 3:42 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
kimbert wrote: |
Must be logical<->physical education week... |
When does the trial edition get available, again? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
MrSmith |
Posted: Tue May 13, 2008 4:19 am Post subject: |
|
|
 Master
Joined: 20 Mar 2008 Posts: 215
|
kimbert wrote: |
Must be logical<->physical education week...
Look in your message definition. What simple type does BalanceBreakdownDetailsUnit have? What ESQL type are you using when you set its value? |
The simple type is a xsd:decimal set at 18 bytes of which there is a virtual decimal point implied at 6 characters from the right withinh the messageset. On re-reading the manuals to ensure I am quoting correctly this would read that if I supplied a value as i do of '000123456789123457' to the parser then the virtual decimal point id placed 6 characyters from the right thus resulting in 000123456789.123457 is this not correct? The value that is supplied, is supplied to the parser without a physical decimal point because the application accepting the message ultimately does not want physical decimal points. The message set has been configured such to ensure that the correct scale was being supplied (verification). It would aid me more if i had information to understand that parsers writing process, if the parser was applying this sset to an incoming string of '000123456789123457' supplied from whereever it knows where to place the decimal point based on the virtual setting and this is verified when viewed in trace therefore why is it not correct to assume that the same is for the outgoing write, why has it decided to take 000123456789123457 (which is already 18 characters) and left justify it and add 6 trailing zeros. Enlighten me if i am being thick but I just don't see it
Quote: |
When does the trial edition get available, again? |
Sorry Jeff I don't folow this comment at all. |
|
Back to top |
|
 |
kimbert |
Posted: Tue May 13, 2008 4:43 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
You are assigning a string value to a decimal field. Try assigning the correct logical value in the logical message tree, rather than the physical value which you want the parser to output. In other words, stop trying to do the parser's job. |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
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
|
|
|
|