This example demonstrates how to generate a QuickFIX data dictionary directly from an Orchestra specification.
This capability ensures backward compatibility for QuickFIX users transitioning to Orchestra as their primary repository, eliminating the need for separate QuickFIX data dictionary management.
The example uses the derived specification from a previous example that defines a single custom NewOrderSingle
message.
Include the QuickFIX dataDictionary
extension in the build.gradle file to enable generating a QuickFIX data dictionary.
orchestra {
specification {
markdown {
reference orchestraHub(name: 'fix-latest', version: 'ep293')
}
}
// Enable QuickFIX data dictionary generation
quickfix {
dataDictionary {}
}
}
Use the Gradle wrapper to run the example.
$ ./gradlew :basic-examples:08-quickfix:runExample
Note:
runExample
is wired to call theorchestraGenerateQuickfixDataDictionary
task from the Orchestra plugin.
The QuickFIX data dictionary will be output to the Gradle build folder.
$ ./basic-examples/08-quickfix/build/quickfix/08-quickfix.xml
<fix major="999" minor="0">
<header/>
<trailer/>
<messages>
<message name="NewOrderSingle" msgtype="D" msgcat="app">
<field name="Account" required="Y"/> // Optional field in FIX 4.4
<field name="ClOrdID" required="Y"/>
<field name="Currency" required="N"/>
<field name="ExecInst" required="N"/>
<field name="HandlInst" required="N"/>
<component name="Instrument" required="Y"/> // Custom Instrument component
<component name="OrderQtyData" required="Y"/>
<field name="OrdType" required="Y"/>
<field name="Price" required="N"/>
<field name="Rule80A" required="Y"/> // Deprecated field. Replaced by OrderCapacity(528) in FIX.4.3.
<field name="Side" required="Y"/>
<field name="TimeInForce" required="N"/>
<field name="TransactTime" required="Y"/>
<field name="ExecBroker" required="N"/> // Deprecated field. Removed in FIX.4.3.
<field name="StopPx" required="N"/>
<field name="ExDestination" required="N"/>
<field name="MinQty" required="N"/>
<field name="MaxFloor" required="N"/>
<field name="LocateReqd" required="N"/>
<field name="SettlCurrency" required="N"/>
<field name="ExpireTime" required="N"/>
<field name="ComplianceID" required="N"/>
<field name="SolicitedFlag" required="N"/>
<field name="SecondaryClOrdID" required="N"/>
<field name="CorporateBuyback" required="N"/> // User-defined field (UDF) not present in the reference specification.
</message>
</messages>
<components>
...
</components>
<fields>
...
</fields>
</fix>