QuickfixJ обязательное поле отсутствует, даже если оно есть
Я получаю сообщение об ошибке "Обязательное поле отсутствует", хотя я уверен, что это поле есть.
58=Conditionally Required Field Missing, field=55
Версии:
QuickFixJ 2.1.0
FIX 4.4
Вот сообщение FIX, которое я отправляю (с пропущенными значениями и несколькими полями, удаленными для ясности)
8=FIX.4.4
9=709
35=R
34=4
49=TARGET
56=ME
11=myClOrdID
131=myQuoteReqID
146=myNoRelatedSym
55=mySymbol // field missing
167=mySecurityType // field missing
Вот код вызова:
String symbol = quoteRequest.getField(new StringField(55)).getValue();
Я также попробовал:
String symbol = quoteRequest.getString(55);
Вот мой словарь данных:
<field number="55" name="Symbol" type="STRING"/>
Я понимаю, что поле символа больше не является частью QuoteRequest
Спецификация FIX для 4.4 (хотя это было в более ранних версиях, таких как 4.0), однако наверняка есть способы получить пользовательские поля? Я не могу контролировать QuoteRequest
сообщение, которое я получаю.
Я всегда могу разобрать сообщение сам, используя toString()
но это своего рода побеждает цель использования quickfixj в первую очередь.
Есть идеи?
2 ответа
Тег 55 находится внутри 146 повторяющейся группы. Смотрите документы для чтения повторяющихся групп.
Поле символа все еще в FIX44. Вам следует потратить некоторое время на ознакомление с файлом словаря данных FIX44.xml, который вы используете.
(Вы можете обнаружить, что вам нужно настроить этот файл на основе сообщений вашего контрагента; на практике никто не использует базовые определения сообщений FIX44, не меняя их хотя бы немного.)
// create group
QuoteRequest.NoRelatedSym group = new QuoteRequest.NoRelatedSym();
// set group, confusing method name I find
message.getGroup(1, group);
// you now have all the getters of fields in that group
Symbol symbol = group.getSymbol();