QuickfixJ обязательное поле отсутствует, даже если оно есть - PullRequest
0 голосов
/ 09 января 2019

Я получаю сообщение об ошибке «Обязательное поле отсутствует», хотя я уверен, что это поле есть.

58=Conditionally Required Field Missing, field=55

Версия:

QuickFixJ 2.1.0

ИСПРАВЛЕНИЕ 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 ]

0 голосов
/ 11 января 2019
// 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();
0 голосов
/ 09 января 2019

Тег 55 находится внутри 146 повторяющихся групп. См. документы для чтения повторяющихся групп .

Поле символа все еще находится в FIX44. Вам следует потратить некоторое время на ознакомление с файлом словаря данных FIX44.xml, который вы используете.

(Вы можете обнаружить, что вам нужно настроить этот файл на основе сообщений вашего контрагента; на практике никто не использует базовые определения сообщений FIX44, не меняя их хотя бы немного.)

...