我是一个快速修复的新手,但相信我,我已经彻底搜索了所有论坛,但没有找到解决方案。我正在使用快速修复1.6库。我有一个FIX消息,它有一个重复组。当我使用sendToTarget()方法发送此消息时,消息将被转发到FIX服务器而不会出现问题,但由于哪个交换机拒绝它而重新排序字段。通过阅读帖子,我了解到使用数据字典将解决问题。但是当我使用具有相同消息的数据字典时,我得到“快速修复。无效消息:在字段中找不到等号”异常。我知道根据数据字典这是一个有效的消息。以下是消息和代码。有人可以请帮助。提前谢谢。
FIX消息: 的 8 = FIXT.1.1 | 9 = 00331 | 35 = AE | 49 = AAA_FIX | 56 = BBB_FIX | 34 = 29 | 52 = 20170124-09:47:14 | 1041 = firm_trade_id_07 | 48 = XS0102233434 | 22 = 4 | 25004 = GBP | 470 = ZZ | 32 = 100 | 31 = 6.33 | 15 = GBP | 64 = 20170125 | 60 = 20170124-09:47:14 | 1430 = O | 574 = 1 | 487 = 0 | 552 = 2 | 54 = 1 | 528 = P | 29 = 4 | 581 = 3 | 453 = 1 | 448 = H7XNBB4851XX0REQ1F70 | 447 = N | 452 = 1 | 54 = 2 | 453 = 1 | 448 = 549300F2CCROIO4RRZ97 | 447 = N | 452 = 17 | 10 = 189 |
代码:
BufferedReader reader = new BufferedReader(new FileReader ("Message.txt"));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
String messageString = stringBuilder.toString();
messageString = messageString.replace('|','\u0001');
Message FIXOrder = new Message(messageString, new DataDictionary("DD.xml"));
-Cheers MJ
答案 0 :(得分:3)
我有同样的例外,并设法找到它的根本原因。
最有可能的原因是FIX消息字符串是从文件加载的,并且可能在字符串末尾有\n
或\r\n
。
然后....解析'预告片'时,由于找不到=
,最后的字符失败了。
在字段中找不到等号
尝试:
public static final String NEW_LINE = System.getProperty("line.separator");
String msgText= loadedText.replace(NEW_LINE, "");
msgText = msgText.replace(';', '\001');
message.fromString(msgText, dataDictionary, false);