我是一個快速修復的新手但相信我,我徹底搜索了所有的論壇,並沒有找到解決方案到這種情況。我正在使用快速修復1.6庫。我有一個有重複組的FIX消息。當我使用sendToTarget()方法發送此消息時,該消息將被轉發到FIX服務器而沒有問題,但是由於哪些交換拒絕它,字段會重新排序。通過閱讀帖子,我知道使用數據字典將解決問題。但是,當我使用數據字典與相同的消息時,我得到「快速修復.InvalidMessage:等號在字段中找不到」異常。我知道這是根據數據字典的有效消息。以下是信息和代碼。有人可以請幫助。提前致謝。quickfix.InvalidMessage異常拋出即使有效的消息
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
什麼是重新排序?重複組內的標籤必須採用固定順序。不使用DataDictionary時,按照遞增順序重新排列 – user1717259
標籤。當使用DataDictionary時,它會失敗並出現上述錯誤。 –
在您提供的示例中解析得很好,所以我懷疑問題出在您的文件Message.txt中。 請問您可以添加一個System.out.println(messageString);這樣我們才能真正知道正在分析哪個字符串? 另外兩個備註: *您讀取文件的方式看起來很奇怪; stringBuilder.append(ls)的用途是什麼;在你的循環? *重複組453在FIX消息中出現兩次。它應該出現一次:453 = 2 | 448 = H7XNBB4851XX0REQ1F70 | 447 = N | 452 = 1 | 448 = 549300F2CCROIO4RRZ97 | 447 = N | 452 = 17 | –