通过 QuickFixJ 向彭博社发送消息时出错
Error when sending message to Bloomberg via QuickFixJ
我正在尝试通过 QuickFixJ 将数据包类型 X 发送到 Bloomberg。我能够成功连接,但是当我发送数据包时,我收到一条错误消息:
8=FIXT.1.1^A9=160^A35=X^A34=4^A49=ARHGBETA^A52=20210915-13:16:04.156^A56=BBGBETA^A1022=****^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
8=FIXT.1.1^A9=253^A35=j^A49=BBGBETA^A56=ARHGBETA^A34=4^A52=20210915-13:16:04.380^A45=4^A372=X^A380=0^A58=Validation failed for incoming X packet:
In mDIncGrp: In groupMDEntries[0]: NULL component instrument_MarketData
In groupMDEntries[1]: NULL component instrument_MarketData
然而,我不知道如何定义组件 instrument_MarketData。我正在使用以下代码生成组:
/**
* Méthode de création d'un nouveau prix pour le publier sur Bloomberg
* @param marketPrice
* */
public MarketDataIncrementalRefresh createMarketDataIncrementalRefresh(MarketPrice marketPrice) {
quickfix.fix50sp2.MarketDataIncrementalRefresh message = new MarketDataIncrementalRefresh();
quickfix.fix50sp2.MarketDataIncrementalRefresh.NoMDEntries group = new MarketDataIncrementalRefresh.NoMDEntries();
message.getHeader().setString(1022, "****");
quickfix.fix50sp2.component.MDIncGrp mdIncGrp = new MDIncGrp();
mdIncGrp.setString(48, marketPrice.getCUSIP());
mdIncGrp.setString(22, "1");
Instrument instrument =new Instrument();
/**
* Ajout prix Bid au message
* */
instrument.setString(279, "0");
instrument.setString(269, "0");
instrument.setString(270, marketPrice.getBid_kech().toString());
group.set(instrument);
mdIncGrp.addGroup(group);
/**
* Ajout prix Ask au message
* */
instrument.setString(279, "0");
instrument.setString(269, "1");
instrument.setString(270, marketPrice.getAsk_kech().toString());
group.set(instrument);
mdIncGrp.addGroup(group);
message.set(mdIncGrp);
return message;
}
我做错了什么?我应该定义一个自定义词典来发送消息,还是可以使用默认词典来实现?
非常感谢!
您不需要自定义词典即可发送 自定义消息。字典验证仅对 收到的 消息进行,因此您可能需要更改字典才能成功接收对方发送的响应。
关于你的问题:这个错误听起来好像你的组中缺少关于乐器的东西。查看您的代码,我认为您有点混淆了组的东西。我发布这个 link 是为了回答你之前的一个问题:https://www.quickfixj.org/usermanual/2.3.0/usage/repeating_groups.html
我认为重要的部分是您应该像这样将组添加到消息中:
quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries group =
new quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries();
group.set(new MDEntryType('0'));
group.set(new MDEntryPx(12.32));
group.set(new MDEntrySize(100));
group.set(new OrderID("ORDERID"));
message.addGroup(group); // important part
在您的代码中,您将一个组添加到一个组 (mdIncGrp.addGroup(group)
) 并在您真正应该使用 addGroup()
的地方执行 message.set(mdIncGrp)
。因此,48/SecurityID
字段不会在 MDIncGrp
中结束,而是在根消息中结束。
8=FIXT.1.1^....removed...^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
^^^ 48 is here where it should really
be in each of these groups starting with delimiter tag 279
我正在尝试通过 QuickFixJ 将数据包类型 X 发送到 Bloomberg。我能够成功连接,但是当我发送数据包时,我收到一条错误消息:
8=FIXT.1.1^A9=160^A35=X^A34=4^A49=ARHGBETA^A52=20210915-13:16:04.156^A56=BBGBETA^A1022=****^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
8=FIXT.1.1^A9=253^A35=j^A49=BBGBETA^A56=ARHGBETA^A34=4^A52=20210915-13:16:04.380^A45=4^A372=X^A380=0^A58=Validation failed for incoming X packet:
In mDIncGrp: In groupMDEntries[0]: NULL component instrument_MarketData
In groupMDEntries[1]: NULL component instrument_MarketData
然而,我不知道如何定义组件 instrument_MarketData。我正在使用以下代码生成组:
/**
* Méthode de création d'un nouveau prix pour le publier sur Bloomberg
* @param marketPrice
* */
public MarketDataIncrementalRefresh createMarketDataIncrementalRefresh(MarketPrice marketPrice) {
quickfix.fix50sp2.MarketDataIncrementalRefresh message = new MarketDataIncrementalRefresh();
quickfix.fix50sp2.MarketDataIncrementalRefresh.NoMDEntries group = new MarketDataIncrementalRefresh.NoMDEntries();
message.getHeader().setString(1022, "****");
quickfix.fix50sp2.component.MDIncGrp mdIncGrp = new MDIncGrp();
mdIncGrp.setString(48, marketPrice.getCUSIP());
mdIncGrp.setString(22, "1");
Instrument instrument =new Instrument();
/**
* Ajout prix Bid au message
* */
instrument.setString(279, "0");
instrument.setString(269, "0");
instrument.setString(270, marketPrice.getBid_kech().toString());
group.set(instrument);
mdIncGrp.addGroup(group);
/**
* Ajout prix Ask au message
* */
instrument.setString(279, "0");
instrument.setString(269, "1");
instrument.setString(270, marketPrice.getAsk_kech().toString());
group.set(instrument);
mdIncGrp.addGroup(group);
message.set(mdIncGrp);
return message;
}
我做错了什么?我应该定义一个自定义词典来发送消息,还是可以使用默认词典来实现?
非常感谢!
您不需要自定义词典即可发送 自定义消息。字典验证仅对 收到的 消息进行,因此您可能需要更改字典才能成功接收对方发送的响应。
关于你的问题:这个错误听起来好像你的组中缺少关于乐器的东西。查看您的代码,我认为您有点混淆了组的东西。我发布这个 link 是为了回答你之前的一个问题:https://www.quickfixj.org/usermanual/2.3.0/usage/repeating_groups.html
我认为重要的部分是您应该像这样将组添加到消息中:
quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries group =
new quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries();
group.set(new MDEntryType('0'));
group.set(new MDEntryPx(12.32));
group.set(new MDEntrySize(100));
group.set(new OrderID("ORDERID"));
message.addGroup(group); // important part
在您的代码中,您将一个组添加到一个组 (mdIncGrp.addGroup(group)
) 并在您真正应该使用 addGroup()
的地方执行 message.set(mdIncGrp)
。因此,48/SecurityID
字段不会在 MDIncGrp
中结束,而是在根消息中结束。
8=FIXT.1.1^....removed...^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
^^^ 48 is here where it should really
be in each of these groups starting with delimiter tag 279