tag 448 appears more than once issue while using data dictionary.

we are using Data dictionary in initiator and acceptor both side is Same, also the message send from initiator to acceptor and vice versa is same,
message when we send message from initiator to acceptor it is received by acceptor and processed.but when the same message is sent from acceptor to initiator,
the initiator sends reject (35=3) to acceptor.

Can anyone assit on this issue

Please refer below logs
8=FIXT.1.1|9=192|35=3|34=3|49=XXXX|52=20200826-11:10:55.716|56=XXX|45=3|58=Tag appears more than once, field=448|371=448|372=CCR|373=13|1408=01.005.00|1603=XXXX|1604=XXXX|10=181|

Looks like a non-standard message you are sending. “CCR” is not valid for RefMsgType(372), i.e. user defined message types need to start with “U”. Can you also post the message that has been rejected? Then I can tell you on which side the software is behaving correctly :slight_smile:

Thanks klein. yes this non-standard message receiving from counterparty we are facing issue at initiator side. also when we keep data dictionary off then message is getting skipped not getting complete message in fromApp.
FYI Message :
8=FIXT.1.1
9=4879
35=CCR
34=3
1128=8
49=XXXXXX
56=XXXXX
52=20200826-11:10:55
11124=35457436
11093=106.10
11094=106.20
11095=RATE_OK
297=21
345=20200826-16:17:52
31=1.47000
195=0
423=20
552=1
54=1
37=XXX774696TKGN2008261612MC
11=NOREF
826=0
78=1
79=UNSPECIFIED
80=500000.00
5967=735000
736=GBP
1506=1
453=9
448=XXX
452=3
447=D
802=1
523=BANK
803=5
448=TKGN
452=1
447=D
802=1
523=TXC
803=5
448=DPA2
452=16
447=D
802=1
523=Dealing TRT Publisher
803=5
448=TR0
452=36
447=D
802=1
523=XXXX.com
803=9
448=#UNSPECIFIED#
452=11
447=D
802=2
523=MakerFullName
803=9
523=testuser00
803=8
448=TR1
452=12
447=D
802=2
523=testuser01@bbc.com
803=9
523=testuser01
803=8
448=#UNSPECIFIED#
452=72
447=D
802=1
523=12333444444
803=4014
11059=0
448=OTC
452=73
447=D
448=1
452=21
447=D
60=20200826-16:12:52
1057=N
30=DEALING_CONVERSATION
11001=3
30400=3
30401=User Info #1
30403=0
30401=User Info #2
30403=1
30401=User Info #3
30403=2
11217=20200826-16:12:52.655000000
17=774696TKGN2008261612MC
150=F
31745=20180315-12:16:43.229000000
31746=20180315-12:17:18.438000000
31747=20180315-12:16:35.007000000
460=4
167=FOR
32=500000.00
15=GBP
1056=735000
64=20200828
63=0
65=SP
55=GBP/USD
11204=1
1028=Y
11092=<?xml version="1.0" encoding="UTF-8"?>1.0354574364c494554-fb08-49e4-b9fa-80f2c90bad50XXX BANK LONDON2020-08-26T16:07:52.790Z2020-08-26T16:17:52.015ZTR0testuser00testuser00XXXXXXXBANK LONDONTR1testuser01testuser01TKG BANK LONDON2018-03-15T12:16:43.229Z2018-03-15T12:17:18.438Z2018-03-15T12:16:35.007Z1TR0TR1JoinTR02020-08-26T16:07:52.790ZJoinTR12020-08-26T16:07:52.790ZSendTR12018-03-15T12:16:30.655ZCounterpartyTypeTheirParty0SPOT USD IN 10falsefalseNONEOnlineSendTR02018-03-15T12:16:35.007ZCounterpartyTypeOurParty110 20falsefalseNONEOnlineSendTR12018-03-15T12:16:43.229ZCounterpartyTypeTheirParty2I BUY 10falsefalseNONEOnlineSendTR02018-03-15T12:16:43.229ZCounterpartyTypeOurParty3falsefalseNONEOnlineSendTR02018-03-15T12:17:18.438ZCounterpartyTypeOurParty4falsefalseEND_LOCALSystemSendTR02018-03-15T12:17:40.015ZCounterpartyTypeOurParty5##ENDED AT 12:17 GMT##falsefalseNONEAuditTrailLeaveTR02020-08-26T16:17:52.015ZLeaveTR12020-08-26T16:17:52.015Z
573=1
11044=ticket
711=2
311=GBP
318=GBP
1045=1.0000
311=GBP/USD
318=USD
1045=105.95
11046=NORMAL
1041=Take774696TKN200826
11125=20200828
11127=2064
10=081

There does not seem to be any obvious error, i.e. the initiator software seems to have an issue and should not reject the message. The error message seems to be misleading, maybe 448 is identified in RefTagID(371) because it sometimes uses the “#” sign. But that is just a guess, i.e. you will have to investigate your software to find the real issue.

The only other issue I see is your UDF 11092 which references XML code but the rest seems to be just a string of field values without delimiters. There is no length field preceding 11092 that would allow the parser to know exactly when the field value ends. Standard FIX fields like SecurityXML(1185) have a length field (SecurityXMLLen(1184)) to mitigast parsing issues.

I noted two things in terms of FIX compliance:

  • MsgType(35) value “CCR” is invalid, should be “UCCR”
  • Usage of tags 10,000 - 19,999 is only valid for internal communication (not sure if initiator and acceptor are inside your company, then it is ok)
  • You are using quite a few UDFs (11xxx, 30xxx, 31xxx), some of which look like there should be standard fields for them in FIX Latest (https://www.fixtrading.org/online-specification/, https://fiximate.fixtrading.org/), e.g. TrdRegTimestamps

Like @hanno.klein says, this sort of technical question is best directed at your FIX engine development community.

The style of the message you’re getting looks very much like those generated by QuickFIX. I’d suggest contacting the community list for QuickFIX, QuickFIX/J , QuickFIX/N or Quickfix/Go as appropriate.

You will definitely need to use both a Transport and App dictionary to parse messages with repeating groups - given your message has custom fields you may also need to tweak the dictionary.

Providing 11092 doesn’t contain the SOH delimeter character the engine can probably handle the content without length indication as text (FIX standard type: String, rather than FIX standard type: data or XMLData). (It’s not well-formed XML obviously but that’s a side issue).

The most likely issue is the presence of a non-standard tag in the 8th repeating group. This will probably cause the parser to think that that the series of groups has ended and then be ‘surprised’ by the presence of 448=OTC. You can fix this most easily by adding 11059 to the definition of the group in the dictionary.

Obviously as there are 9 groups you might expect it to handle this better and include the tag but alas I think it does not right now.

1 Like