【问题标题】:Implementing a FIX client through QuickFixJ throws NoSuchMethodError通过 QuickFixJ 实现 FIX 客户端会引发 NoSuchMethodError
【发布时间】:2015-06-08 17:12:38
【问题描述】:

我对 FIX 比较陌生,这是我第一次尝试连接。我正在尝试使用 QuickFixJ 库连接到我提供的 UAT 环境。具体来说,我使用的是 quickfixj-all-1.6.0.jar

我已经实现了来自here 的示例代码,它一直有效到socketAcceptor.start()

这是完整的代码示例:

SocketAcceptor socketAcceptor = null;
   try {
       SessionSettings executorSettings = new SessionSettings(
               "quickFixTester/acceptorSettings.txt");
       Application application = new TestTradeAppExecutor();
       FileStoreFactory fileStoreFactory = new FileStoreFactory(
               executorSettings);
       MessageFactory messageFactory = new DefaultMessageFactory();
       FileLogFactory fileLogFactory = new FileLogFactory(executorSettings);
       socketAcceptor = new SocketAcceptor(application, fileStoreFactory,
               executorSettings, fileLogFactory, messageFactory);
       socketAcceptor.start();
   } catch (ConfigError e) {
       e.printStackTrace();
   }

我得到的错误是

2312 [main] INFO quickfix.SessionSchedule - [FIX.4.4:[SenderCompID]->[TargetCompID]] weekly, SUN 00:00:00-UTC - FRI 00:00:00-UTC
     Executor Session Created with SessionID = FIX.4.4:[SenderCompID]->[TargetCompID]
2327 [main] INFO quickfix.SocketAcceptor - SessionTimer started
2371 [main] INFO quickfix.mina.NetworkingOptions - Socket option: SocketTcpNoDelay=true
2371 [main] INFO quickfix.mina.NetworkingOptions - Socket option: SocketSynchronousWrites=false
2371 [main] INFO quickfix.mina.NetworkingOptions - Socket option: SocketSynchronousWriteTimeout=30000
Exception in thread "main" java.lang.NoSuchMethodError: quickfix.mina.message.FIXProtocolCodecFactory.addMessageDecoder(Ljava/lang/Class;)V
      at quickfix.mina.message.FIXProtocolCodecFactory.<init>(FIXProtocolCodecFactory.java:31)
      at quickfix.mina.acceptor.AbstractSocketAcceptor.startAcceptingConnections(AbstractSocketAcceptor.java:109)
      at quickfix.SocketAcceptor.initialize(SocketAcceptor.java:86)
      at quickfix.SocketAcceptor.start(SocketAcceptor.java:80)
      at quickFixTester.TestTradeAppExecutorApp.main(TestTradeAppExecutorApp.java:38)

提供了“SenderCompID->TargetCompID”变量,但已从此处的示例中删除。

quickfix.mina.message.FIXProtocolCodecFactory.addMessageDecoder(Ljava/lang/Class;)V 在 socketAcceptor.start 方法中抛出。我看不到任何原因,因为我只更改了配置示例以指向 FIX UAT 环境

我不明白为什么 jar 中包含的方法会抛出这个错误,我不是在这个阶段试图发送消息,只是试图打开一个连接。这个例子似乎对其他人有用。

我使用 FIX 客户端示例 found here 也得到完全相同的错误

【问题讨论】:

    标签: java quickfix fix-protocol quickfixj


    【解决方案1】:

    您是否也引用了 mina-core jar?在lib目录下...

    mina SSL 过滤器怎么样?根据我的评论, quickfix.mina 的 NoSuchMethodError 意味着未引用库。

    【讨论】:

    • 嗨 rupweb,是的,我已将 mina-core-2.0.9 添加到 lib 中
    • 这应该更像是一个评论而不是一个答案。
    • 是的,虽然我认为这是答案。我不知道这个问题的答案...但是 quickfix.mina 中的 NoSuchMethodError 意味着缺少一个库。
    • 或者这意味着 quickfix 和 mina 库版本不再兼容 - 我在必须使用带有 mina 2+ 的旧 quickfix 版本时看到了这一点,其中一些类已被重写/重构。就我而言,解决方案是使用较旧的 mina,因为我有较旧版本的 quickfixj,其扩展由客户端完成。如果可以,请改用较新的 quickfixj 版本。
    【解决方案2】:

    按原样导入second example 而不是尝试实现到我自己的Eclipse 项目中。该问题似乎是由于从 quickfix-all jar 中使用了不正确的导入导致在启动期间调用了错误的方法。

    【讨论】:

    • 你能解释一下你是如何解决这个问题的吗?接受的解决方案对我来说毫无意义,我也有同样的问题。
    • 您好,抱歉,链接现在已损坏。我通过从示例行复制代码来解决此问题,包括 pom 依赖项。错误原因已在上面评论,选择的 quickfix 和 mina 库版本不再兼容。如果您还没有,请尝试使用最新的 QuickFIX 和 mina-core 库。
    • 我通过使用 mina-core-2.1.3.jar 和 quickfixj-all-1.6.4.jar 解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多