我是一个快速修复的新手,但请相信我,我已经彻底搜索了所有论坛,但没有找到解决这种情况的方法。我正在使用快速修复 1.6 库。我有一条包含重复组的 FIX 消息。当我使用 sendToTarget() 方法发送此消息时,消息被毫无问题地转发到 FIX 服务器,但由于交换拒绝它,字段被重新排序。看了帖子,才知道用数据字典就可以解决问题。但是,当我使用具有相同消息的数据字典时,我得到 "quick fix.InvalidMessage: Equal sign not found in field" 异常。根据数据字典,我知道这是一条有效消息。以下是消息和代码。有人可以帮忙吗?提前致谢。
修复消息: 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=英镑|470=ZZ|32=100|31=6.33|15=英镑|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"));
-干杯 兆焦耳
最佳答案
我遇到了同样的异常,并设法找到了它的根本原因。
很可能是因为 FIX 消息字符串是从文件加载的,并且可能在末尾有:\n
或 \r\n
字符串。
然后....在解析“预告片”时,由于未找到 =
而导致最后一个字符失败。
Equal sign not found in field
尝试:
public static final String NEW_LINE = System.getProperty("line.separator");
- 删除所有行分隔符:
String msgText= loadedText.replace(NEW_LINE, "");
- 将分隔符更改为 SOH(如果需要)
msgText = msgText.replace(';', '\001');
- 然后使用 quickFix fromString:
message.fromString(msgText, dataDictionary, false);
关于java - quickfix.InvalidMessage 即使有有效消息也会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285852/