QuickfixJ 必填字段丢失,即使它在那里

QuickfixJ required field missing, even if it's there

我收到一条 "Conditionally Required Field Missing" 错误消息,尽管我确定该字段存在。

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"/>

我意识到符号字段不再是 4.4 的 QuoteRequest FIX 规范的一部分(尽管它在早期版本中,例如 4.0),但是肯定有检索自定义字段的方法吗?我无法控制收到的 QuoteRequest 消息。

我总是可以使用 toString() 自己解析消息,但这有点违背了首先使用 quickfixj 的目的。

有什么想法吗?

标记 55 在 146 重复组内。参见 the docs for reading repeating groups

符号字段仍在 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();