Re: [Quickfix-developers] Java Exception reveals the problem with TAG 52
Brought to you by:
orenmnero
|
From: VP M. IT A. E. T. <ass...@gm...> - 2005-06-28 18:41:51
|
Here is what I see happening
F (my company) sends a 35=3DA to C the client
Client sends 35=3DA
QF does not like tag 52...do not know why yet...
and it tries to reject that message before login occurs
so an exception is thrown and then we know the rest...
I guess the same thing happened yesterday with Quickfix.
This is with QuickfixJ.
Oren, now I am going to do the cvs up command see if the updates help
me nudge along.
( I am guessing the CVS up is shorthand for CVS update...I am severely
handicapped with C++, CVS and windows)
I hope am not being taken for high maintenance user
--
RK
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, outgoing>
(8=3DFIX.4.29=3D7135=3DA34=3D149=3DFTEST52=3D20050628-18:28:04.33156=3DCTES=
T98=3D0108=3D3010=3D197)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, event> (Initiated logon request)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, outgoing>
(8=3DFIX.4.29=3D7135=3DA34=3D149=3DFTEST52=3D20050628-18:28:04.33156=3DCTES=
T98=3D0108=3D3010=3D197)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, incoming>
(8=3DFIX.4.29=3D8735=3DA49=3DCTEST56=3DFTEST34=3D0000198=3D052=3D20050628-1=
8:27:49108=3D60141=3DN383=3D5600010=3D203)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, event> (error while receiving mes=
sage
quickfix.SessionException: Tried to send a reject while not logged on:
Tag specified out of required order (field 52)
at quickfix.Session.generateReject(Session.java:753)
at quickfix.Session.next(Session.java:508)
at quickfix.netty.AbstractSocketInitiator.processMessage(AbstractSo=
cketInitiator.java:210)
at quickfix.SocketInitiator.onMessage(SocketInitiator.java:94)
at quickfix.netty.AbstractSocketInitiator$SessionConnection$NettySe=
ssionListener.messageReceived(AbstractSocketInitiator.java:380)
at net.gleamynode.netty2.Session.fireMessageReceived(Session.java:7=
33)
at net.gleamynode.netty2.LowLatencyEventDispatcher.flush(LowLatency=
EventDispatcher.java:67)
at net.gleamynode.netty2.ReadController.processEvent(ReadController=
.java:360)
at net.gleamynode.netty2.IoProcessor.process(IoProcessor.java:334)
at net.gleamynode.netty2.IoProcessor.access$500(IoProcessor.java:73=
)
at net.gleamynode.netty2.IoProcessor$Worker.run(IoProcessor.java:36=
4)
)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, event> (Dropped Connection)
FIX.4.2:FTEST->CTEST is LOGGED OUT <20050628-18:28:04,
FIX.4.2:FTEST->CTEST, outgoing>
(8=3DFIX.4.29=3D7135=3DA34=3D249=3DFTEST52=3D20050628-18:28:04.63356=3DCTES=
T98=3D0108=3D3010=3D203)
<20050628-18:28:04, FIX.4.2:FTEST->CTEST, event> (Initiated logon request)
On 6/28/05, VP Marketing IT Asset Enterprise Technologies
<ass...@gm...> wrote:
> I switched to an executor in the LAN and it worked fine. You are correct
> the trouble earlier was with the settings file...
>=20
> The file is there. But there is only one session and that is with an exte=
rnal
> party and it could be failing for a number of reasons.
>=20
> The error (console) output did not indicate that. It misdirects to an
> initiator not
> being there.
>=20
> We can talk about how to structure a generic Error control and communicat=
ion
> exception hierarchy.
>=20
> Consider the following three classes:
>=20
> class QuickfixJErrorList
> {
> final String error_string[] =3D
> {
> "ILLEGAL ARGUMENT/INTERNAL ERROR",
> "CONFIG FILE NOT READABLE",
> "CONFIG NOT ACCORDING TO SPECIFICATION", // somethign simpler may be
> "SESSION COULD NOT BE INITIALIZED",
>=20
> };
> final int base_error=3D1300;
> final int error_no[] =3D {1300,1301,1302, 1303} ; // this coudl be
> base_error, base_error+1, etc
>=20
> static public String getErrorMessage(int code) {
> return error_string[(code>base_error&&(code<(base_error+error_no.length))=
)?code:0);
> }
> static public String getErrorMessage(String code){
> try {
> return getErrorMessage(Integer.parseInt(code.trim()));
> } catch(Exception e) { }
> return getErrorMessage(0);
> }
> }
> class QuickfixException extends Exception
> {
> QuickfixException (String msgCode)
> {
> super(QuickfixJErrorList.getErrorMessage(msg);
> }
> }
>=20
> And we can implement the JErrorList in XML and load the DOM
> or put it on HSQLDB or some such thing and manage it from anywhere.
> instead of being static class...
>=20
> I am hacking as I am writing this email.. the idea may be clearer...
> I can do this..if you send me a specification what you want.
> --
> rk
>
|