我是FIX世界的新手。我正在编写一个使用Java处理FIX消息的应用程序,为此我正在使用QuickFIX / J。我已经从主页(http://quickfixengine.org/)下载了DataDictionary 。我正在使用版本4.4。
XML文件中存在组和组件。但是组件可以再次包含组。
它们之间的确切区别是什么?
组件不是真的...东西。它们就像FIX DataDictionary(DD)中的宏。许多消息需要相同的字段集,因此DD定义了其他消息可以包括的组件,而不是在每个消息中都指定相同的字段。
另一方面,组是非常真实的事情。这是一个重复的字段序列,将在一条消息中出现0次或多次。
QuickFIX(QF)编程接口在很大程度上忽略了组件的概念。您不能从消息中提取组件,因为组件不是QF中的概念。您只需像其他任何字段一样提取字段。
一个假设的示例:以下两个消息定义完全相同。
带有组件
<message name="Automobile" msgtype="X" msgcat="app">
<field name="Wheel" required="Y"/>
<field name="Bumper" required="Y"/>
<component name="Dashboard" required="Y"/>
</message>
<component name="Dashboard">
<field name="Radio" required="Y"/>
<field name="AirConditioner" required="Y"/>
<field name="Heater" required="Y"/>
</component>
没有组件
<message name="Automobile" msgtype="X" msgcat="app">
<field name="Wheel" required="Y"/>
<field name="Bumper" required="Y"/>
<field name="Radio" required="Y"/>
<field name="AirConditioner" required="Y"/>
<field name="Heater" required="Y"/>
</message>
看到?组件几乎只是一个宏。
无论采用哪种方式定义,您都最终会调用msg.GetHeater()
(或其他方式)。
非常感谢您!!!很好的解释!您能解释一下QuickFix(/ J)如何知道组中包含哪些字段吗?例如,组件“ Parties”只有一个元素:组“ NoPartyIDs”。我知道这个组是什么。在FIX44.xml(从quickfixengine.org下载)文件中,单词“ NoPartyIDs”仅出现两次。进入组件“ Parties”的定义(第2416行)和字段的定义(第5217行)。怎么知道Java组“ NoPartyIDs”的字段?如果xml文件在组中定义一个<groups> -tag会更好吗?
嗯...“ NoPartyIDs” 是一个组标记。它包含组的字段。
是的。但这不是在XML文件中定义的,不是吗?因此,必须在QuickFix实现的某些Java类中定义它吗?
我现在正在FIX44.xml文件中查看它。内部
<component name="Parties">
是NoPartyIDs组,其中包含PartyID,PartyIDSource,PartyRole和NoPartySubIDs组。