首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将quickfix.Message转换为quickfix.fix50sp2.Message

不能将quickfix.Message转换为quickfix.fix50sp2.Message
EN

Stack Overflow用户
提问于 2015-05-06 11:02:34
回答 1查看 2.4K关注 0票数 3

我正在使用最新的quickfix版本,即1.6.0。我已经有了针对1.5.3编写的代码,我要做的是将其升级到1.6.0

我遇到的问题是,当我使用裂纹(msg,sessionID)方法时,它会引发quickfix.Message cannot be cast to quickfix.fix50sp2.Message错误。我正在发送一条正确的FIX50SP2 MarketDataSnapshotFullRefresh消息。异常的摘录如下

java.lang.ClassCastException: quickfix.Message cannot be cast to quickfix.fix50sp2.Message at quickfix.fix50sp2.MessageCracker.crack(MessageCracker.java:1555) at com.****.fixserver.FixMessageListener.fromApp(FixMessageListener.java:162) at quickfix.Session.fromCallback(Session.java:1731) at quickfix.Session.verify(Session.java:1682)

如何将传入的消息破解为正确的SP2消息?

有一个crack50()方法,但是这需要一个在fromApp回调中不可用的SP2消息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 02:22:46

当开始字符串为FIXT.1.1时,quickfix将将消息与FIX50一起处理为DefaultMessageFactory。因此,它将自动生成FIX.5.0消息。

解决方案是编写您自己的自定义消息工厂,以便在传输为FIXT.1.1时生成SP2消息。我就是这么做的。

编写实现quickfix.MessageFactory接口的自定义消息工厂。您可以复制DefaultMessageFactory代码并按如下方式更改create()方法。

代码语言:javascript
复制
 public Message create(String beginString, String msgType) {
    MessageFactory messageFactory = messageFactories.get(beginString);
    if (beginString.equals(BEGINSTRING_FIXT11)) {
        // The default message factory assumes that only FIX 5.0 will be
        // used with FIXT 1.1 sessions. A more flexible approach will require
        // an extension to the QF JNI API. Until then, you will need a custom
        // message factory if you want to use application messages prior to
        // FIX 5.0 with a FIXT 1.1 session.
        //
        // TODO: how do we support 50/50SP1/50SP2 concurrently?
        //
        // If you need to determine admin message category based on a data
        // dictionary, then use a custom message factory and don't use the
        // static method used below.
        if (!MessageUtils.isAdminMessage(msgType)) {
            messageFactory = messageFactories.get(FIX50SP2);
        }
    }

    if (messageFactory != null) {
        return messageFactory.create(beginString, msgType);
    }

    Message message = new Message();
    message.getHeader().setString(MsgType.FIELD, msgType);

    return message;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30074850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档