[QFJ-83] mina.AbstractIoHandler breaks when trying to process received ListStatus message Created: 07/Oct/06  Updated: 08/Jan/07  Resolved: 08/Jan/07

Status: Closed
Project: QuickFIX/J
Component/s: Build
Affects Version/s: 1.0.3
Fix Version/s: None

Type: Other Priority: Default
Reporter: Plamen Vassilev Assignee: Steve Bate
Resolution: Fixed Votes: 0
Labels: None
Environment:

OS: Slackware 10.2
OS: uname -a: Linux <hostname> 2.6.17.8 #2 Sat Aug 12 10:25:59 EEST 2006 i686 unknown unknown GNU/Linux
JAVA: java version "1.5.0_08"
JAVA: Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
JAVA: Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)
IDE: Eclipse 3.2
LIB: QuickFIX/J 1.0.3
LIB: mina-core-0.9.3.jar
LIB: backport-util-concurrent-2.1.jar
LIB: slf4j-jdk14-1.0.1.jar
LIB: log4j-1.2.13.jar



 Description   

Message from the log:
20061001-21:48:02.932:
8=FIX.4.2^A9=797^A35=N^A49=FXTRADES^A56=trader^A34=13^A52=20061001-21:48:02^A66=1159739243883^A429=2^A82=1^A431=1^A83=1^A60=20061001-21:48:02^A68=10^A73=
10^A11=8^A14=0^A39=0^A151=500000^A6=0^A37=A20062750000600^A55=EUR/GBP^A54=2^A11=9^A14=0^A39=0^A151=400000^A6=0^A37=A20062720094F00^A55=EUR/JPY^A54=1^A11=3^A14=0^A39=0^A151=800000^A6=0^A37=A200627
50000100^A55=EUR/CHF^A54=2^A11=5^A14=0^A39=0^A151=400000^A6=0^A37=A20062750000300^A55=EUR/JPY^A54=1^A11=6^A14=0^A39=0^A151=400000^A6=0^A37=A20062720094C00^A55=USD/JPY^A54=1^A11=4^A14=0^A39=0^A151
=400000^A6=0^A37=A20062750000200^A55=EUR/JPY^A54=2^A11=7^A14=0^A39=0^A151=400000^A6=0^A37=A20062750000500^A55=GBP/JPY^A54=1^A11=6^A14=0^A39=0^A151=500000^A6=0^A37=A20062750000400^A55=GBP/CHF^A54=
1^A11=44^A14=0^A39=0^A151=600000^A6=0^A37=A20062720096X00^A55=AUD/JPY^A54=2^A11=45^A14=0^A39=0^A151=600000^A6=0^A37=A20062720096Y00^A55=AUD/JPY^A54=1^A10=078^A

Error:
Oct 2, 2006 12:48:02 AM quickfix.mina.AbstractIoHandler messageReceived
SEVERE: Invalid message: Actual body length=240, Expected body length=797

ListStatus DTD:
<message name="ListStatus" msgtype="N" msgcat="app">
<field name="ListID" required="Y"/>
<field name="ListStatusType" required="Y"/>
<field name="NoRpts" required="Y"/>
<field name="ListOrderStatus" required="Y"/>
<field name="RptSeq" required="Y"/>
<field name="ListStatusText" required="N"/>
<field name="EncodedListStatusTextLen" required="N"/>
<field name="EncodedListStatusText" required="N"/>
<field name="TransactTime" required="N"/>
<field name="TotNoOrders" required="Y"/>
<group name="NoOrders" required="Y">
<field name="ClOrdID" required="Y"/>
<field name="CumQty" required="Y"/>
<field name="OrdStatus" required="Y"/>
<field name="LeavesQty" required="Y"/>
<field name="CxlQty" required="Y"/>
<field name="AvgPx" required="Y"/>
<field name="OrdRejReason" required="N"/>
<field name="Text" required="N"/>
<field name="EncodedTextLen" required="N"/>
<field name="EncodedText" required="N"/>
</group>
</message>

In QuickFIX Log Viewer message looks like this:
8 BeginString = FIX4.2
9 BodyLength = 797
34 MsgSeqNum = 13
35 MsgType = N ListStatus
49 SenderCompID = FXTRADES
52 SendingTime = 20061001-21:48:02
56 TargetCompID = trader
6 AvgPx = 0
11 ClOrdID = 45
14 CumQty = 0
37 OrderID = A20062720096Y00
39 OrdStatus = 0 NEW
54 Side = 1 BUY
55 Symbol = AUD/JPY
60 TransactTime = 20061001-21:48:02
66 ListID = 1159739243883
68 TotNoOrders = 10
73 NoOrders = 10
-> 6 AvgPx = 0
-> 11 ClOrdID = 8
-> 14 CumQty = 0
-> 39 OrdStatus = 0 NEW
-> 151 LeavesQty = 500000

82 NoRpts = 1
83 RptSeq = 1
151 LeavesQty = 600000
429 ListStatusType = 2 RESPONSE
431 ListOrderStatus = 1 INBIDDINGPROCESS
10 CheckSum = 078

I know there is missing tag 84 (CxlQty) but I am not sure that's the reason for this kind of behavior.



 Comments   
Comment by Steve Bate [ 08/Oct/06 ]

Hello,

Are you sure you were using a data dictionary when parsing the message? If you don't use a data dictionary, QFJ cannot parse the groups correctly and
the calculated message length will be incorrect (because normally fields can't be repeated except in a group).

Comment by Plamen Vassilev [ 08/Oct/06 ]

Hello,

Yes, I double-checked that. I also send and receive other messages containing repeating groups (MarketDataRequest.NoRelatedSym, MarketDataIncrementalRefresh for example) without problems. I realize that this is odd, because as far as I understand - the parsing algorithm is universal for all messages, and it makes no sense for it to work for one kind and to not work for other. If you need any additional information, that I can provide regarding this problem - I am ready to provide it.

Thanks for your time and consideration!

Generated at Sat May 18 12:27:54 UTC 2024 using JIRA 7.5.2#75007-sha1:9f5725bb824792b3230a5d8716f0c13e296a3cae.