Я новичок с быстрым исправлением, но, поверьте мне, я тщательно изучил все форумы и не нашел решения для этого сценария. Я использую quick fix 1.6 libs. У меня есть сообщение FIX, в котором есть повторяющаяся группа. Когда я отправляю это сообщение с помощью метода sendToTarget(), сообщение отправляется на сервер FIX без проблем, но поля получают переупорядочивание, из-за которого обмен отклоняет его. Читая сообщения, я узнал, что использование словаря данных решит проблему. Но когда я использую словарь данных с тем же сообщением, я получаю «быстрое исправление .InvalidMessage: знак равенства не найден в поле« исключение. Я знаю, что это достоверное сообщение в словаре данных. Ниже приведены сообщение и код. Может кому-то помочь. Заранее спасибо.quickfix.InvalidMessage исключение, заброшенное даже с допустимым сообщением
FIX Сообщение: 8 = FIXT.1.1 | 9 = 00331 | 35 = АЕ | 49 = AAA_FIX | 56 = BBB_FIX | 34 = 29 | 52 = 20170124-09: 47: 14 | = 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 | = 1 574 | 487 = 0 | 552 = 2 | 54 = 1 | 528 = Р | 29 = 4 | 581 = 3 | 453 = 1 | 448 = H7XNBB4851XX0REQ1F70 | 447 = Н | 452 = 1 | 54 = 2 | 453 = 1 | 448 = 549300F2CCROIO4RRZ97 | 447 = Н | 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
Что происходит с переупорядочиванием? Теги в повторяющейся группе должны быть в фиксированном порядке. – user1717259
теги переставляются в возрастающем порядке, если не использовать DataDictionary. И при использовании 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 | –