Java quickfix.InvalidMessage异常即使在包含有效消息的情况下也会引发

Java quickfix.InvalidMessage异常即使在包含有效消息的情况下也会引发,java,quickfixj,Java,Quickfixj,我是一个新手,有一个快速解决方案,但相信我,我已经彻底搜索了所有论坛,还没有找到解决这个问题的方法。我正在使用quick fix 1.6 libs。我有一个修复消息,其中包含一个重复组。当我使用sendToTarget()方法发送此消息时,该消息会毫无问题地转发到修复服务器,但由于exchange拒绝,字段会重新排序。通过阅读这些帖子,我知道使用数据字典可以解决这个问题。但当我将数据字典与相同的消息一起使用时,我得到了“quick fix.InvalidMessage:在字段中找不到等号”异常。

我是一个新手,有一个快速解决方案,但相信我,我已经彻底搜索了所有论坛,还没有找到解决这个问题的方法。我正在使用quick fix 1.6 libs。我有一个修复消息,其中包含一个重复组。当我使用sendToTarget()方法发送此消息时,该消息会毫无问题地转发到修复服务器,但由于exchange拒绝,字段会重新排序。通过阅读这些帖子,我知道使用数据字典可以解决这个问题。但当我将数据字典与相同的消息一起使用时,我得到了“quick fix.InvalidMessage:在字段中找不到等号”异常。根据数据字典,我知道这是一条有效的消息。下面是消息和代码。有人能帮忙吗。提前谢谢

修复消息: 7强>8强强>8强>8强>8强>8强=固定不变。1.1 1 1.1 124; 9强>8强>8强>8强>8强>8强>8强>8强>8强>8强>8强>8强>8强>8强>8强>7.1 7 7.1 7 7 7 7.1 1244=AAAAa124; 49=AAAAAAa|修修修修修修女56=BBB B B B B B\124;56=BBB\\|固定固定,56=BBB B124;56=BBB\124;34=B124;34=B124;34=B124;34=B124;34=B124;34=B124;34=B124;29;34=29;29;34=29;29 29 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=549300f2ccroo4rrz97 | 452=17 | 10=189ng>


代码:

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"));
-干杯
MJ

我也有同样的异常,并设法找到了它的根本原因

很可能是因为修复消息字符串是从文件加载的,并且可能在字符串的末尾有:
\n
\r\n

然后。。。。分析“拖车”时,由于未找到
=
,最后的字符将失败

字段中找不到等号 尝试:
public静态最终字符串NEW_LINE=System.getProperty(“LINE.separator”)

  • 拆下所有管路分离器:
    String msgText=loadedText.replace(新行“”)
  • 将分隔符更改为SOH(如果需要)
    msgText=msgText.replace(“;”,“\001”)
  • 然后使用quickFix fromString:
    message.fromString(msgText,dataDictionary,false)

  • 正在进行什么重新订购?重复组中的标记必须按固定顺序排列。不使用DataDictionary时,标记将按递增顺序重新排列。在使用DataDictionary时,由于上面的错误,它失败了。在您提供的示例中,这种解析很好,所以我怀疑问题出在您的Message.txt文件中。请添加一个System.out.println(messageString);这样我们才能真正知道正在解析哪个字符串?另外两条评论:*你读文件的方式看起来很奇怪;stringBuilder.append(ls)的用途是什么;在你的圈子里?*重复组453在修复消息中出现两次。它应该出现一次:453=2 | 448=H7XNBB4851XX0REQ1F70 | 447=N | 452=1 | 448=549300F2CCROIO4RRZ97 | 447=N | 452=17 |这个错误会泄露不包含等号的消息数据?假设提供的修复消息导致了错误,我认为@regis alenda已经注意到一个错误:重复的组PartyId(标签:453 NoPartyIds)在您的消息中设置为1(453=1),虽然有明显的两组-执行公司和反公司,并且正如Regis所指出的,也应该设置为2(453=2),如果在您进行替换之前,这些分离器中的一个丢失,这可能会导致长时间的搜索。确保检查每个标签的有效性。