QuickFIX/J 消息破解问题 - onMessage() 处理程序未被调用

QuickFIX/J message cracking problem - onMessage() handler not being called

我在 QuickFIX/J 消息破解方面遇到问题。我的消息破解后的消息处理程序无法正常工作。

我已经像link一样实现了消息破解(代码在下面)https://www.quickfixj.org/usermanual/2.3.0/usage/receiving_messages.html

当我调试代码时,找不到库端的 invoker 实例。所以 UnsupportedMessageType 被抛出。

调试代码:



项目Settings/Codes:

gradle 依赖关系:

implementation group: 'org.quickfixj', name: 'quickfixj-all', version: '2.3.0'


初始化:

SessionSettings settings = new SessionSettings(MyClass.class.getClassLoader().getResourceAsStream("Server.cfg"));
MessageStoreFactory storeFactory = new FileStoreFactory(settings);
LogFactory logFactory = new FileLogFactory(settings);
MessageFactory messageFactory = new DefaultMessageFactory();
SocketAcceptor socketAcceptor = new SocketAcceptor(fixApplication, storeFactory, settings, logFactory, messageFactory);

承兑人代码:


...
public class FixApplication extends MessageCracker implements Application {
   ...

    @Override
    public void fromApp(Message message, SessionID sessionId) throws FieldNotFound, IncorrectTagValue, UnsupportedMessageType {
        crack(message, sessionId);
    }

    public void onMessage(quickfix.fix50sp2.NewOrderSingle order, SessionID sessionId) throws FieldNotFound, IncorrectTagValue {
        // expecting message cracker will call this handler on NewOrderSingle message
    }
...
}

如您所见,我正在使用 quickfix.fix50sp2.NewOrderSingle。 这是 NewOrderSingle 的示例交易。我收到 Unsupported Message Type 错误。

< 8=FIXT.1.1|9=132|35=D|49=SENDER_ID|56=TARGET_ID|34=2|52=20210818-20:46:50|11=899094438|21=1|55=ERICB.ST|54=1|60=20210818-20:46:50|40=2|44=50|38=1000|10=117|

> 8=FIXT.1.1|9=106|35=j|34=2|49=TARGET_ID|52=20210818-20:46:50.096|56=SENDER_ID|45=2|58=Unsupported Message Type|372=D|380=3|10=000|



配置文件:

[default]
FileStorePath=server/data/acceptor
FileLogPath=server/log/acceptor
ConnectionType=acceptor
SenderCompID=XXX
SocketConnectHost=localhost
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
ReconnectInterval=5
BeginString=FIXT.1.1
DefaultApplVerID=FIX.5.0SP2
TransportDataDictionary=spec/FIXT11.xml
AppDataDictionary=spec/FIX50SP2.xml
UseDataDictionary=Y
ValidOrderTypes=1,2


问题:

谢谢。

问题与本地字符设置有关。我在 Windows 将本地语言设置更改为美国,问题已解决。

详情如下:

DeafultMessageFactory 上加载工厂消息时 class 名称被隐藏为

  • quickfix.fıx...MessageFactory <-- 注意:fıx 而不是 fix

应该是

  • quickfix.fix...MessageFactory

当原始修复消息在工厂中转换为相关修复消息(如 quickfix.fix41.NewOrderSingle)时,它并没有完全转换。而是返回通用 quickfix.Message


@Christoph John,感谢您的帮助。