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)
来禁用重复组中的排序验证。但是,这只是一种解决方法。
我建议就此与您的交易对手联系,因为特别是在重复组中,字段顺序需要遵循消息定义,即数据字典中的顺序。
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.
我们正在从文本文件中的 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)
来禁用重复组中的排序验证。但是,这只是一种解决方法。
我建议就此与您的交易对手联系,因为特别是在重复组中,字段顺序需要遵循消息定义,即数据字典中的顺序。
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.