问题描述
我们正在从源数据库接收FIX消息,并且必须解析并存储在我们的系统中。这些来自ICE exchange(WebICE),我们正在使用QuickFix和FIX42.xml数据字典来解析消息。
我们能够成功解析执行报告和UDS(用户定义的策略),但在尝试解析重复组时却无法解析安全定义。
下面是带有消息的示例代码。
val testMessage = "8=FIX.4.2^A9=97129^A35=d^A49=ICE^A34=21^A52=20200904-11:00:16.742^A56=8428^A57=123abc^A322=1^A323=4^A320=XX_Security_Request 0^A9064=0^A393=19275^A82=193^A67=1^A711=3^A311=2322323^A309=MSS SDU0320.U0320^A308=IFED^A305=8^A9013=0.001^A9133=2.500^A9134=2.500^A9040=0.001^A9041=2500^A307=XYXYXYXYXYX^A763=0^A1039=C^A9014=2500.0^A9017=57500.0^A326=17^A998=TEST TEST^A318=USD^A9083=3^A9084=0^A9085=daily^A9061=467^A9062=TEST TEST Futures^A9063=Product Description^A9032=2.500^A9030=1^A9132=2.500^A9091=Test Malin^A9092=1^A9093=0^A9095=Energy^A9215=0^A9217=0^A9205=0^A436=1.0^A9216=0^A463=FXXXXX^A542=20200904^A9100=USD^A9101=USD / TEST TEST^A9022=1^A9024=1.0^A9049=1^A9203=1^A9025=Y^A916=20200903^A917=20200903^A9201=69360^A9200=4^A9202=03 Sep 20^A9300=656^A9301=TEST Gas Transmission - Malin^A9302=PGT-Malin^A9303=MSS^A9034=1^A9070=16^A9071=0^A9072=K^A9073=25.0^A9071=1^A9072=K^A9073=1.0^A9071=2^A9072=K^A9073=1.0^A9071=3^A9072=K^A9073=1.0^A9071=0^A9072=V^A9073=1.0^A9071=1^A9072=V^A9073=1.0^A9071=2^A9072=V^A9073=1.0^A9071=3^A9072=V^A9073=1.0^A9071=0^A9072=S^A9073=1.0^A9071=1^A9072=S^A9073=1.0^A9071=2^A9072=S^A9073=1.0^A9071=3^A9072=S^A9073=1.0^A9071=0^A9072=E^A9073=1.0^A9071=1^A9072=E^A9073=1.0^A9071=2^A9072=E^A9073=1.0^A9071=3^A9072=E^A9073=1.0^A311=624232323233062^A309=PES SDU0320.U0320^A308=IFED^A305=8^A9013=0.001^A9133=2.500^A9134=2.500^A9040=0.001^A9041=2500^A307=Test Desc Futures - Permian (EP) - 03 Sep 20^A763=0^A1039=C^A9014=2500.0^A9017=57500.0^A326=17^A998=TEST TEST^A318=USD^A9083=3^A9084=0^A9085=daily^A9061=476^A9062=TEST TEST Futures^A9063=Product Description ^A9032=2.500^A9030=1^A9132=2.500^A9091=Test EPPermian^A9092=1^A9093=0^A9095=Energy^A9215=0^A9217=0^A9205=0^A436=1.0^A9216=0^A463=FXXXXX^A542=20200904^A9100=USD^A9101=USD / TEST TEST^A9022=1^A9024=1.0^A9049=1^A9203=1^A9025=Y^A916=20200903^A917=20200903^A9201=69360^A9200=4^A9202=03 Sep 20^A9300=665^A9301=El Paso - Permian Basin^A9302=Permian (EP)^A9303=PES^A9034=1^A9070=16^A9071=0^A9072=K^A9073=25.0^A9071=1^A9072=K^A9073=1.0^A9071=2^A9072=K^A9073=1.0^A9071=3^A9072=K^A9073=1.0^A9071=0^A9072=V^A9073=1.0^A9071=1^A9072=V^A9073=1.0^A9071=2^A9072=V^A9073=1.0^A9071=3^A9072=V^A9073=1.0^A9071=0^A9072=S^A9073=1.0^A9071=1^A9072=S^A9073=1.0^A9071=2^A9072=S^A9073=1.0^A9071=3^A9072=S^A9073=1.0^A9071=0^A9072=E^A9073=1.0^A9071=1^A9072=E^A9073=1.0^A9071=2^A9072=E^A9073=1.0^A9071=3^A9072=E^A9073=1.0^A311=23232323^A309=SCS SDU0320.U0320^A308=IFED^A305=8^A9013=0.001^A9133=2.500^A9134=2.500^A9040=0.001^A9041=2500^A307=Test Desc Futures - Socal-TEST - 03 Sep 20^A763=0^A1039=C^A9014=2500.0^A9017=57500.0^A326=17^A998=TEST TEST^A318=USD^A9083=3^A9084=0^A9085=daily^A9061=1462^A9062=TEST TEST Futures^A9063=Product Description ^A9032=2.500^A9030=1^A9132=2.500^A9091=Test Socal Cty^A9092=1^A9093=0^A9095=Energy^A9215=0^A9217=0^A9205=0^A436=1.0^A9216=0^A463=FXXXXX^A542=20200904^A9100=USD^A9101=USD / TEST TEST^A9022=1^A9024=1.0^A9049=1^A9203=1^A9025=Y^A916=20200903^A917=20200903^A9201=69360^A9200=4^A9202=03 Sep 20^A9300=1277^A9301=Socal - TEST^A9302=Socal-TEST^A9303=SCS^A9034=1^A9070=16^A9071=0^A9072=K^A9073=25.0^A9071=1^A9072=K^A9073=1.0^A9071=2^A9072=K^A9073=1.0^A9071=3^A9072=K^A9073=1.0^A9071=0^A9072=V^A9073=1.0^A9071=1^A9072=V^A9073=1.0^A9071=2^A9072=V^A9073=1.0^A9071=3^A9072=V^A9073=1.0^A9071=0^A9072=S^A9073=1.0^A9071=1^A9072=S^A9073=1.0^A9071=2^A9072=S^A9073=1.0^A9071=3^A9072=S^A9073=1.0^A9071=0^A9072=E^A9073=1.0^A9071=1^A9072=E^A9073=1.0^A9071=2^A9072=E^A9073=1.0^A9071=3^A9072=E^A9073=1.0^A10=210^A"
val dd: DataDictionary = new DataDictionary("FIX42.xml")
val message: Message = new quickfix.Message(testMessage,dd)
val noOfunderlyings= message.getInt(711)
println("Underlyings "+noOfunderlyings)
for(i <- 1 to noOfunderlyings ) {
val FixGroup: Group = message.getGroup(i,711)
println("UnderlyingSecurityID : " + FixGroup.getString(309))
}
在以下行失败: val FixGroup:组= message.getGroup(i,711)
出现以下错误消息
Exception in thread "main" quickfix.FieldNotFound: 711,index=1
at quickfix.FieldMap.getGroup(FieldMap.java:644)
我们已经检查了数据字典,并且其中存在重复的组。 FIX客户端引擎的源端也使用了相同的数据字典来接收来自交换的消息。
数据字典:Data Dictionary
目前,这已成为我们的瓶颈。向所有其他SO用户寻求帮助。
DD段 9064标签-> ExchangeSilo(Int)
711标签-> NoUnderlyings(NumInGroup)
<message name='SecurityDeFinition' msgtype='d' msgcat='app'>
<field name='SecurityResponseID' required='Y' />
<field name='SecurityResponseType' required='N' />
<field name='SecurityReqID' required='Y' />
<field name='SecurityID' required='N' />
<field name='ExchangeSilo' required='N' />
<field name='TotalNumSecurities' required='Y' />
<field name='Symbol' required='N' />
<field name='norpts' required='N' />
<field name='ListSeqNo' required='N' />
<!-- USEFUL FOR THE NEW Security DEFinitioN RESPONSE-->
<group name='NoUnderlyings' required='N'>
<field name='UnderlyingSymbol' required='N' />
<field name='UnderlyingSecurityID' required='N' />
<field name='UnderlyingSecurityExchange' required='N' />
<field name='UnderlyingIDSource' required='N' />
<field name='IncrementPrice' required='N' />
<field name='ScreenTickValue' required='N' />
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)