java - quickfix.InvalidMessage 即使有有效消息也会抛出异常

标签 java quickfixj

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

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

关于java - quickfix.InvalidMessage 即使有有效消息也会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285852/

相关文章:

java - Joda Time 的 DateTimeFormatter 出现意外行为?

java - 使用抽象父类(super class)生成子类的随机实例

java - 如何使用 Java QuickFIX 重置序列号

java - QuickFix/j 连接状态机

java - 我应该使用什么格式化程序模式从数字 '00123' 和 '00001' 相应地获取 '123' 、 '1' 字符串?

java - 如何正确回滚JTA事务?

java - Android: main.xml 错误

quickfixj - 如何独立管理和重新加载多个 QuickFIX/J session ?

quickfix - 位置报告错误 (FIX 4.4) : Group 702's first entry does not start with delimiter 704

java - fastfix.Message 无法转换为quickfix.fix50sp2.Message