Re: [Quickfix-users] Field Order in Message Class
Brought to you by:
orenmnero
From: Grant B. <gbi...@co...> - 2009-12-21 20:42:08
|
I meant UseDataDictionary=Y, of course. On Mon, Dec 21, 2009 at 12:07 PM, Grant Birchmeier <gbi...@co...> wrote: > 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 >> >> > |