QuickFIX/J 未读取 FIX 消息中的所有重复组

QuickFIX/J not reading all the repeating groups in FIX message

我们正在从文本文件中的 WebICE 交换接收修复消息,我们的应用程序正在使用 QuickFixJ 逐行读取和解析它们。我们注意到在某些消息中,重复组字段未被解析,并且在使用数据字典进行验证时出现错误。

quickfix.FieldException: Out of order repeating group members, field=326

例如示例文件 data-test.csv 前两行解析成功,但第三行失败并显示上述错误消息。

经调查我发现,在前两行中,标签 326 在标签 9133 之后,但在第三行中,它在标签 9133 之前,因此验证失败。如果我按照第三个调整数据字典,它会成功,但当然第一个开始失败。

只有少数消息会发生这种情况,因为大多数其他修复消息都得到了很好的验证和解析。这是从使用 QuickFix/N 的现有 C# 应用程序到使用 QuickFix/J 的 Scala 应用程序的迁移项目的一部分。它在源端运行良好(QuickFIx/N)。 QuickFIx/J 和 QuickFIx/N 库在处理组字段方面有什么区别吗?

为了帮助重现问题,我共享了包含 3 条修复消息的数据文件,如上所述。

数据文件:data-test.csv 数据字典:ICE-FIX42.xml

这是测试代码片段

val dd: DataDictionary = new DataDictionary("ICE-FIX42.xml")
val mfile = new File("data-test.csv")
for (line <- Source.fromFile(mfile).getLines) {
    val message = new quickfix.Message(line,dd)
    dd.setCheckUnorderedGroupFields(true)
    dd.validate(message)
    val noOfunderlyings= message.getInt(711)
    println("Number of Underlyings "+noOfunderlyings)
    for(i <- 1 to noOfunderlyings ) {
      val FixGroup: Group = message.getGroup(i, 711)          
      println("UnderlyingSecurityID : " + FixGroup.getString(311))
    }
}

请求其他 SO 用户,如果你能帮助我。

非常感谢

您应该使用 setCheckUnorderedGroupFields(false) 来禁用重复组中的排序验证。但是,这只是一种解决方法。

我建议就此与您的交易对手联系,因为特别是在重复组中,字段顺序需要遵循消息定义,即数据字典中的顺序。

FIX TagValue encoding spec

Field sequence within a repeating group

...

Fields within repeating groups must be specified in the order that the fields are specified in the message definition.