在 fromApp 方法和 filStorePath 中的消息文件中收到不同的修复消息

Recived different fix message in fromApp method and message file in filStorePath

我正在尝试捕获 MarketDataIncrementalRefresh 消息。 它有一个组 noMDEntries,我正在尝试解析它。

我有两个问题:

1st - 我已经打印了来自 fromApp 方法的消息,这与我在通过 FileStorePath 创建的文件中得到的消息不同。 这怎么可能?然后我正在破解 message cracker 但即使破解后它也与 fromApp

中收到的消息相同

来自 fromApp 的消息:

8=FIX.4.29=7535=X34=3649=XXXXXXXX52=2019011605:09:51.00056=XXXXXXXX262=1268=110=223

文件中收到的消息:

8=FIX.4.29=0019435=X49=XXXXXXXX56=XXXXXXXX34=3652=20190116-05:09:51.000262=1268=1279=1269=055=ES167=FUT200=201903541=20190315205=1518211=M207=CME100=XCME461=F15=USD270=249375271=20290=110=123

2nd - 在遍历组时出现错误:

quickfix.FieldNotFound: 268, index=1
    at quickfix.FieldMap.getGroup(FieldMap.java:633)

但是如您所见,字段 268 已设置,我还通过 message.isSetField(268) 再次检查了它,结果是 true,就在它尝试之后:

MarketDataIncrementalRefresh.NoMDEntries mdEntriesGroup = new MarketDataIncrementalRefresh.NoMDEntries();
message.getGroup(1, mdEntriesGroup);

它给出了上面的错误。

FIX42.xml 看起来与我收到的消息中的字段顺序相同。:

 <message name='MarketDataIncrementalRefresh' msgtype='X' msgcat='app'>
        <field name='MDReqID' required='Y' />
        <field name='PriceFeedStatus' required='N' />
        <group name='NoMDEntries' required='Y'>
            <field name='MDUpdateAction' required='Y' />
            <field name='MDEntryType' required='Y' />
            <field name='Symbol' required='N' />
            <field name='SecurityType' required='N' />
            <field name='SecuritySubType' required='N' />
            <field name='MaturityMonthYear' required='N' />
            <field name='MaturityDate' required='N' />
            <field name='MaturityDay' required='N' />
            <field name='PutOrCall' required='N' />
            <field name='StrikePrice' required='N' />
            <field name='OptAttribute' required='N' />
            <field name='DeliveryTerm' required='N' />
            <field name='DeliveryDate' required='N' />
            <field name='SecurityID' required='N' />
            <field name='SecurityExchange' required='N' />
            <field name='ExDestination' required='N' />
            <field name='CFICode' required='N' />
            <field name='Currency' required='N' />
            <field name='MDEntryPx' required='N' />
            <field name='MDEntrySize' required='N' />
            <field name='MDEntryDate' required='N' />
            <field name='MDEntryTime' required='N' />
            <field name='MDEntryPositionNo' required='N' />
            <field name='SecondaryOrderID' required='N' />
            <field name='NumberOfOrders' required='N' />
        </group>
        <field name='ExchangeSendingTime' required='N' />
        <field name='ExchangeTransactTime' required='N' />
        <field name='ExchangeSeqNum' required='N' />
    </message>

始终信任 FromApp()FromAdmin() 上的消息日志。在引擎尝试解析消息之前记录日志;回调发生在之后。如果在解析时发生错误(就像你的情况),你在回调中看到的将是错误的(你正在看到的)。

我以前见过你的问题。可能发生的情况是您的配置有误,或者您配置的 DD xml 文件与您的交易对手的规范不准确。

首先,你的配置文件应该有这些行:

UseDataDictionary=Y

# for FIX4
DataDictionary=path/to/your/dd.xml

# for FIX5+
AppDataDictionary=path/to/your/FIX5whatever.xml
TransportDataDictionary=path/to/your/FIXT1.1.xml

其次,根据配置中的 DD 文件检查您的消息。可能重复组定义中的某些内容不正确。例如,组定义中可能缺少一个字段,解析器在遇到它时会提前退出组。确保您的配置指向正确的 xml 文件。

(如果您修复上面的消息粘贴以包含可见的字段分隔符,我会回来帮助查看。)