QuickFixJ解析FIX消息报错:组73需设分隔符字段11的解决咨询
问题解决思路
这个错误的核心是QuickFixJ对重复组的处理逻辑:它会把组定义里的第一个字段默认当成组的分隔符字段(用来区分不同组实例的唯一标识),这个字段的required属性设置无效——只要组存在(消息里出现了73这个组计数字段),每个组实例里就必须包含这个分隔符字段。
你的数据字典里73组的第一个字段是11Tag,所以QuickFixJ要求每个组实例必须有11字段,但对手方只发了37字段,因此抛出错误。
修改数据字典的具体方法
直接在组的定义里通过delimiter属性指定实际存在的字段作为分隔符(这里对手方发送了37Tag,所以把它设为分隔符):
<group name="73Tag" required="N" delimiter="37Tag"> <field name="11Tag" required="N"/> <field name="37Tag" required="N"/> <field name="44Tag" required="N"/> <field name="66Tag" required="N"/> <field name="77Tag" required="N"/> <component name="122Tag" required="N"/> <field name="67Tag" required="N"/> <field name="87Tag" required="N"/> <field name="97Tag" required="N"/> </group>
这样QuickFixJ就会用37Tag来识别组实例的边界,不再强制要求11Tag存在,就能正常解析对手方的消息了。
补充说明
你之前设置的setAllowUnknownMessageFields、setCheckFieldsOutOfOrder等参数,只负责处理未知字段、字段顺序这类问题,和重复组的分隔符检查无关,所以不会生效。
内容的提问来源于stack exchange,提问作者user2868864
相关产品推荐
相关产品推荐

