QuickFIX/N 1.8 を使用していますが、XML に基づいて DataDictionary を作成する必要がある場合、FIX50SP1_TRTN.xmlAllocationReport
(Thomson Reuters 提供) に 2 つのコンポーネント ( TrdInstrmtLegGrp
、InstrmtLegAllocGrp
)を持つ1 つのメッセージ ( ) が含まれているため、失敗します。同じ名前のグループ ( NoLegs
- 555
)。
QuickFIX/N は、各グループのキーが id であるすべてのコンポーネントのグループを含む、メッセージごとの辞書を作成しようとしています。したがって、キーを 2 回挿入しようとしており555
、2 回目に例外がスローされます。
System.ArgumentException: '同じキーを持つアイテムが既に追加されています。'
\QuickFIXn\DataDictionary\DataDictionary.cs
else if(childNode.Name == "group")
{
DDField fld = FieldsByName[childNode.Attributes["name"].Value];
DDGrp grp = new DDGrp();
XmlAttribute req = childNode.Attributes["required"];
if (req != null && req.Value == "Y"
&& (componentRequired == null || componentRequired.Value == true))
{
ddmap.ReqFields.Add(fld.Tag);
grp.Required = true;
}
if (!ddmap.IsField(fld.Tag))
{
ddmap.Fields.Add(fld.Tag, fld);
}
grp.NumFld = fld.Tag;
parseMsgEl(childNode, grp);
ddmap.Groups.Add(fld.Tag, grp); //########### It fails when the second group is processed ###########
}
FIX50SP1_TRTN.xmlの内容の要約
<fix major="5" minor="0">
<header/>
<trailer/>
<messages>
<message name="AllocationReport" msgtype="AS" msgcat="app">
<component name="TrdInstrmtLegGrp" required="N"/>
<component name="InstrmtLegAllocGrp" required="N"/>
</message>
</messages>
<components>
<component name="TrdInstrmtLegGrp">
<group name="NoLegs" required="N"> <!-- 555 -->
(content A)
</group>
</component>
<component name="InstrmtLegAllocGrp">
<group name="NoLegs" required="N">
(content B)
</group>
</component>
</components>
<fields>
<field number="555" name="NoLegs" type="NUMINGROUP"/>
</fields>
</fix>
私の質問:
- QuickFIX/N はこの状況をサポートするはずですか?
- この問題に直面したことがありますか? どのように解決しましたか?
- この状況に関する明示的な制約 (QuickFIX/N または FIX プロトコル自体) を知っていますか? (おそらく、メッセージには同じ名前のグループを持つ複数のコンポーネントを含めることはできないという明示的な制限があります)。