QuickFix4J正在截断FIX消息中的重复组

问题描述 投票:0回答:1

我有一个FIX消息作为字符串,我正在使用QuickFix4J从此消息创建一个消息对象,以便我可以将其发送给另一方。

我正在使用的DataDictionary由另一方提供给我。

但是当我用DD解决它并创建消息时,许多字段,尤其是重复的字段都会被截断。基本上,当一组字段重复时,最终消息只有一个重复字段的实例。

这是我的原始信息:

8=FIXT.1.1|9=1288|35=X|34=1163|49=XX|52=20190410-10:27:43|56=XXXXXXXXXXXXXXXXXXXXX|131=XXXXXXXXXXXXXX_2019410_155743|146=1|55=[X/X]|48=58013XXX5|22=1|6360=XXXXXXXX XXXXXXXX|454=1|455=XX58013XXX54|456=4|20200=2|20201=1|20202=6|20203=99.06300000|20204=1111.00|20205=3|20206=XXX2|20201=2|20202=6|20203=0.14400000|20204=2222.00|20205=3|20206=XXX2|460=3|1227=XXXX|29703=XXXX XXXX|167=XXXX|541=20350410|225=20170410|223=0.03500000|106=XXXXXXXXX XXXX XXXXXX XXXX XXX XXXX XXXXX|107=XXX  3.500  3/1/27 X26|873=20170309|54=2|38=188000|64=20190412|15=XXX|126=20190410-10:32:43|60=20190410-10:27:43|663=1|699=9128286X1|761=1|29715=XX9128286X18|29716=4|29717=XXX|29718=0.02625000|29719=20290215|423=6|453=7|448=XXXXXXX1|447=X|452=11|802=1|523=XXXXXXX XXXXXX XX XXX|803=9|448=XXXX|447=X|452=13|448=XXX XXXXXXXXXX 5|447=X|452=13|448=XXXXXX33|447=X|452=17|802=1|523=0355|803=17|448=XXXX|447=X|452=17|448=XXXXXX XXXXXX XXXXXXXXXX (XXX) XXX|447=X|452=17|448=XXXXXXX|447=X|452=13|58=XXXXXX5 (XXXXXXXXXX, XXXXXXX XXXXXX XX XXX)  XXXXXXXX  XXX XX $100,000 XXX 3.500 03/01/27 X26, XXXXXXXXX XXX 2.625 02/29, XXX XX 2 XXXX XXXXX-XXXXXXX , XXXX XXXX.|5625=2|20117=10155743|5961=XXXXXX|5626=3|20012=1 3|5215=X|5627=XXXXXXXXX|5630=XXXXXXX, XXXX|20120=X2X-XXX-XXXX|21031=X|21032=X|20013=0.3|29724=60|22203=XXXX|29741=000X|29742=1000|10=144|

这是创建消息对象后的消息:

8=FIXT.1.1|9=262|35=X|34=656|49=XX|52=20190410-10:27:45.566|56=XXXXXXXXXXXXXXXXXXXXX|131=XXXXXXXXXXXXXX_2019410_155743|146=1|55=[X/X]|48=58013XXX5|22=1|6360=XXXXXXXX XXXXXXXX|454=1|455=XX58013XXX54|456=4|20200=2|20201=2|20202=6|20203=99.06300000|20204=1111.00|20205=3|20206=XXX2|10=111|

这是我创建消息的代码:

rawMessage = new Message(newmessage, dataDictionary, false);

Session.sendToTarget(rawMessage, sessionID)

有没有一种方法可以发送消息,没有quickfix4j试图解决它,从而截断字段。不幸的是我无法分享DD。

fix-protocol quickfixj data-dictionary
1个回答
1
投票

我看到两个问题:

第一个问题:你的方法是错误的

rawMessage = new Message(newmessage, dataDictionary, false);
Session.sendToTarget(rawMessage, sessionID)

你做不到!序列号,时间戳等不再有效!

你在创建天真的消息重播器吗? (为什么人们一直试图这样做?)它不会起作用! FIX消息流具有不能盲目重放的状态。

如果您正在创建测试工具,则需要比此更智能。停止你正在做的事情并重新考虑你的方法。

第二个问题:你的DD可能有错误

截断的重复组总是意味着DataDictionary问题。 DD与正在解析的消息不匹配。肯定会发生以下情况之一:

  • 该消息在该组中放置了一个字段,该字段不在该组的DD定义中
  • 消息的组有乱序的字段(与DD的顺序相比)

解析组时,引擎会在看到它不期望的字段时立即结束该组。

我正在使用的DataDictionary由另一方提供给我。

不要相信它!交易对手使用自己的文档会出错,因为他们实际上并没有使用它们,或者因为它们的内部版本比它们发布的版本更新。

开始针对他们给你的DD手动解析你的消息,我打赌你会发现错误。

© www.soinside.com 2019 - 2024. All rights reserved.