scala - 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 用户,如果你能帮助我。
非常感谢
解决方案
您应该使用setCheckUnorderedGroupFields(false)
禁用重复组中的排序验证。但是,这只是一种解决方法。
我建议就此与您的交易对手联系,因为特别是在重复组中,字段顺序需要遵循消息定义,即数据字典中的顺序。
重复组内的字段序列
...
必须按照在消息定义中指定字段的顺序指定重复组中的字段。
推荐阅读
- asp.net - Azure Front-Door - X-Azure-ClientIP 显示的是 IPV6 地址而不是 IPV4
- windows - WTSQueryUserToken 抛出错误 1008,即使在 LocalSystem 下运行时也是如此
- python - 熊猫在时间上求和
- python - Django:将上传的文件保存在特定目录中
- java - 如何按字母顺序对 ZipFile 内容进行交互?
- python - 在python中拼接二进制图像
- html - 无法在反应中显示 base64 图像?
- ssas - 在多维数据集中添加一列以暗表部署后
- angular - 停止对话框中的保存按钮以关闭 Angular jqxScheduler 中的对话框
- php - 如何使用网络路由