首页 > 解决方案 > QuickFIX/J 未读取 FIX 消息中的所有重复组

问题描述

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

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

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

经过调查,我发现,在前两行中,标签 326 位于标签 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 用户,如果你能帮助我。

非常感谢

标签: scalaquickfixquickfixj

解决方案


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

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

FIX TagValue 编码规范

重复组内的字段序列

...

必须按照在消息定义中指定字段的顺序指定重复组中的字段。


推荐阅读