QuickFIX will validate and reject any poorly formed messages before they can reach your application. An XML file defines what messages, fields, and values a session supports.
Several standard files are in included in the spec directory.
The skeleton of a definition file looks like this.
<fix type="FIX" major="4" minor="1"> <header> <field name="BeginString" required="Y"/> ... </header> <trailer> <field name="CheckSum" required="Y"/> ... </trailer> <messages> <message name="Heartbeat" msgtype="0" msgcat="admin"> <field name="TestReqID" required="N"/> </message> ... <message name="NewOrderSingle" msgtype="D" msgcat="app"> <field name="ClOrdID" required="Y"/> ... </message> ... </messages> <fields> <field number="1" name="Account" type="CHAR" /> ... <field number="4" name="AdvSide" type="CHAR"> <value enum="B" description="BUY" /> <value enum="S" description="SELL" /> <value enum="X" description="CROSS" /> <value enum="T" description="TRADE" /> </field> ... </fields> </fix>
The validator will not reject conditionally required fields because the rules for them are not clearly defined. Using a conditionally required field that is not preset will cause a message to be rejected.