I have a question about how to manage the QFJException error on the server side when an invalid DefaultApplVerID is used (as 55) in the Login request to the server.
Currently, the callbacks in the Application interface do not receive this error and the socket connection remains open.
What I want to do is to manage this error as a server and send RejectLogon to the user (or directly disconnect its connection).
Quickfixj Version = 2.3.1
Server config:
[default]
ConnectionType=acceptor
...
BeginString=FIXT.1.1
DefaultApplVerID=FIX.5.0SP2
...
UseDataDictionary=Y
RejectGarbledMessage=Y
Test data:
- Logon request with incorrect DefaultApplVerID (1137=55):
21:57:32.746 [NioProcessor-12] INFO quickfixj.msg.incoming - FIXT.1.1:EXCHANGE->XYZ/SUB1: 8=FIXT.1.19=12635=A49=XYZ56=EXCHANGE34=152=20231012-18:57:3250=SUB1553=USER_NAME554=123456108=600098=01137=55141=Y10=035
- Error stacktrace:
21:59:34.328 [NioProcessor-12] ERROR quickfix.mina.acceptor.AcceptorIoHandler - org.quickfixj.QFJException: Unknown or unsupported ApplVerID: 55
org.quickfixj.QFJException: Unknown or unsupported ApplVerID: 55
at quickfix.MessageUtils.toBeginString(MessageUtils.java:294)
at quickfix.DefaultDataDictionaryProvider.lambda$new$1(DefaultDataDictionaryProvider.java:50)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
at org.quickfixj.SimpleCache.computeIfAbsent(SimpleCache.java:41)
at quickfix.DefaultDataDictionaryProvider.getApplicationDataDictionary(DefaultDataDictionaryProvider.java:67)
at quickfix.MessageUtils.parse(MessageUtils.java:147)
at quickfix.mina.AbstractIoHandler.messageReceived(AbstractIoHandler.java:129)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:1015)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:418)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:257)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:122)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:643)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:539)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1224)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1213)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Thanks.