Validation

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.