即使使用有效消息

时间:2017-02-16 22:24:55

标签: java quickfixj

我是一个快速修复的新手,但相信我,我已经彻底搜索了所有论坛,但没有找到解决方案。我正在使用快速修复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

1 个答案:

答案 0 :(得分:3)

我有同样的例外,并设法找到它的根本原因。

最有可能的原因是FIX消息字符串是从文件加载的,并且可能在字符串末尾有\n\r\n

然后....解析'预告片'时,由于找不到=,最后的字符失败了。

在字段
中找不到等号

尝试: public static final String NEW_LINE = System.getProperty("line.separator");

  1. 删除所有行分隔符: String msgText= loadedText.replace(NEW_LINE, "");
  2. 将分隔符更改为SOH(如果需要) msgText = msgText.replace(';', '\001');
  3. 然后使用quickFix fromString: message.fromString(msgText, dataDictionary, false);