Re: [Quickfix-users] Field Order in Message Class
Brought to you by:
orenmnero
From: Grant B. <gbi...@co...> - 2009-12-21 18:07:20
|
I believe you need to be using a data dictionary when using repeating groups. Thus, you need to set UseDataDictionary=N and specify a location to your dictionary xml file. -Grant On Mon, Dec 21, 2009 at 1:33 AM, chris <chr...@gm...> wrote: > QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Hi all, > > This is very odd - any clues or pointers to missed posts very welcome. > > Using FIX.4.2, C++, 1.12.4, g++ 4.3.3 on Ubuntu 9.04 > > [DEFAULT] > ConnectionType=initiator > HeartBtInt=30 > ReconnectInterval=10 > LogonTimeout=120 > FileStorePath=store > FileLogPath=log > StartTime=00:00:00 > EndTime=00:00:00 > UseDataDictionary=N > SocketConnectPort=442 > SenderCompID=SENDER > ResetOnDisconnect=Y > ResetOnLogout=Y > ValidateUserDefinedFields=N > ValidateFieldsOutOfOrder=Y > > [SESSION] > BeginString=FIX.4.2 > TargetCompID=TARGET > SocketConnectHost= > ResetSeqNumFlag=Y > DataDictionary=FIX42.xml > > > Briefly : > On receipt of a MarketDataIncrementalRefresh with more than 1 group (i.e most of them with BID / OFFER) quickfix generates a RepeatedTag rejection. > > Less Briefly : > > Looking at Log Viewer and Wireshark everything is fine - repeated groups, all OK. Everything is also good when viewing an XML export from the Log Viewer ... > > > <message> > <header> > <field name="BeginString" number="8"><![CDATA[FIX.4.2]]></field> > <field name="BodyLength" number="9"><![CDATA[221]]></field> > <field name="MsgSeqNum" number="34"><![CDATA[3]]></field> > <field enum="MarketDataIncrementalRefresh" name="MsgType" number="35"><![CDATA[X]]></field> > <field name="SenderCompID" number="49"><![CDATA[TARGET]]></field> > <field name="SendingTime" number="52"><![CDATA[20091221-03:19:07.535]]></field> > <field name="TargetCompID" number="56"><![CDATA[SENDER]]></field> > </header> > <body> > <field name="MDReqID" number="262"><![CDATA[2009-12-21-03:19:07]]></field> > <field name="NoMDEntries" number="268"><![CDATA[2]]></field> > <group> > <field enum="NEW" name="MDUpdateAction" number="279"><![CDATA[0]]></field> > <field enum="BID" name="MDEntryType" number="269"><![CDATA[0]]></field> > <field name="MDEntryID" number="278"><![CDATA[1]]></field> > <field name="Symbol" number="55"><![CDATA[USD/JPY]]></field> > <field name="MDEntryPx" number="270"><![CDATA[90.449]]></field> > <field name="Currency" number="15"><![CDATA[USD]]></field> > <field name="MDEntrySize" number="271"><![CDATA[6000000]]></field> > <field name="NumberOfOrders" number="346"><![CDATA[2]]></field> > </group> > <group> > <field enum="NEW" name="MDUpdateAction" number="279"><![CDATA[0]]></field> > <field enum="OFFER" name="MDEntryType" number="269"><![CDATA[1]]></field> > <field name="MDEntryID" number="278"><![CDATA[2]]></field> > <field name="Symbol" number="55"><![CDATA[USD/JPY]]></field> > <field name="MDEntryPx" number="270"><![CDATA[90.456]]></field> > <field name="Currency" number="15"><![CDATA[USD]]></field> > <field name="MDEntrySize" number="271"><![CDATA[1000000]]></field> > <field name="NumberOfOrders" number="346"><![CDATA[1]]></field> > </group> > </body> > <trailer> > <field name="CheckSum" number="10"><![CDATA[041]]></field> > </trailer> > </message> > > but quickfix insists it isn't and generates this ... > > > <message> > <header> > <field name="BeginString" number="8"><![CDATA[FIX.4.2]]></field> > <field name="BodyLength" number="9"><![CDATA[109]]></field> > <field name="MsgSeqNum" number="34"><![CDATA[3]]></field> > <field enum="Reject" name="MsgType" number="35"><![CDATA[3]]></field> > <field name="SenderCompID" number="49"><![CDATA[SENDER]]></field> > <field name="SendingTime" number="52"><![CDATA[20091221-03:19:07.639]]></field> > <field name="TargetCompID" number="56"><![CDATA[TARGET]]></field> > </header> > <body> > <field name="RefSeqNum" number="45"><![CDATA[3]]></field> > <field name="Text" number="58"><![CDATA[Tag appears more than once]]></field> > <field name="RefTagID" number="371"><![CDATA[15]]></field> > <field name="RefMsgType" number="372"><![CDATA[X]]></field> > </body> > <trailer> > <field name="CheckSum" number="10"><![CDATA[111]]></field> > </trailer> > </message> > > > If I look in Session::next() with this ... > > std::cout << "DEBUG : Session::next() : BEGIN MESSAGE" << std::endl; > std::cout << message.toXML() << std::endl; > std::cout << "DEBUG : Session::next() : END MESSAGE" << std::endl; > > I see this ... > > DEBUG : Session::next() : BEGIN MESSAGE > <message> > <header> > <field number="8"><![CDATA[FIX.4.2]]></field> > <field number="9"><![CDATA[221]]></field> > <field number="35"><![CDATA[X]]></field> > <field number="34"><![CDATA[3]]></field> > <field number="49"><![CDATA[CNX]]></field> > <field number="52"><![CDATA[20091221-05:48:36.020]]></field> > <field number="56"><![CDATA[int2mansing2str]]></field> > </header> > <body> > <field number="15"><![CDATA[USD]]></field> > <field number="15"><![CDATA[USD]]></field> > <field number="55"><![CDATA[USD/JPY]]></field> > <field number="55"><![CDATA[USD/JPY]]></field> > <field number="262"><![CDATA[2009-12-21-05:48:35]]></field> > <field number="268"><![CDATA[2]]></field> > <field number="269"><![CDATA[0]]></field> > <field number="269"><![CDATA[1]]></field> > <field number="270"><![CDATA[90.301]]></field> > <field number="270"><![CDATA[90.307]]></field> > <field number="271"><![CDATA[1000000]]></field> > <field number="271"><![CDATA[1000000]]></field> > <field number="278"><![CDATA[1]]></field> > <field number="278"><![CDATA[2]]></field> > <field number="279"><![CDATA[0]]></field> > <field number="279"><![CDATA[0]]></field> > <field number="346"><![CDATA[1]]></field> > <field number="346"><![CDATA[1]]></field> > </body> > <trailer> > <field number="10"><![CDATA[017]]></field> > </trailer> > </message> > DEBUG : Session::next() : END MESSAGE > > > and of course this is the result ... > > DEBUG : DataDictionary::validate() > field = 8 > field = 9 > field = 35 > field = 34 > field = 49 > field = 52 > field = 56 > field = 10 > field = 15 > field = 15 > DEBUG : Session::next() : catch RepeatedTag > > The field data in the message body is sorted and without the grouping information. > > > -- > chris boucher > "In this house we obey the laws of thermodynamics!" - H. Simpson > > ------------------------------------------------------------------------------ > This SF.Net email is sponsored by the Verizon Developer Community > Take advantage of Verizon's best-in-class app development support > A streamlined, 14 day to market process makes app distribution fast and easy > Join now and get one step closer to millions of Verizon customers > http://p.sf.net/sfu/verizon-dev2dev > _______________________________________________ > Quickfix-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-users > > |