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



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

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

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

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

这种情况只发生在少数消息中,因为大多数其他修复消息都得到了很好的验证和解析。这是从使用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标记值编码规范

重复组内的字段序列

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

最新更新