Quickfix crack()会为字段35抛出Field not found异常

时间:2015-01-23 12:53:06

标签: exception quickfix

我是quickfix的新手。

我创建了一个通常与服务器连接的客户端。在我的fromApp()函数中,我可以使用简单的std :: cout<<打印消息。消息<<的std :: ENDL;并且消息的所有字段都在那里,它们也存在于日志文件中。当我尝试调用crack()时,它会抛出Field not found异常。查看日志文件,我看到异常被抛出,因为quickfix找不到字段35.任何人都知道这件事吗?

EDIT1:

void fromApp( const FIX::Message& message,
                           const FIX::SessionID& sessionID )
throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType )
{
    std::cout << "FromApp" << std::endl;
    std::cout << message << std::endl;

    try
    {
        crack( message, sessionID );
    }
    catch(std::exception& ex)
    {
        std::cout << "crack exception: " << ex.what() << std::endl;
    }
}

void onMessage( const FIX44::MarketDataIncrementalRefresh& message, const FIX::SessionID& sessionID )
{

    std::cout << "OnMessage" << std::endl;
}

void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { std::cout << "FromApp" << std::endl; std::cout << message << std::endl; try { crack( message, sessionID ); } catch(std::exception& ex) { std::cout << "crack exception: " << ex.what() << std::endl; } } void onMessage( const FIX44::MarketDataIncrementalRefresh& message, const FIX::SessionID& sessionID ) { std::cout << "OnMessage" << std::endl; }

在终端窗口中,我得到以下输出:

在message.current.log上我得到:

FromApp
8=FIX.4.49=12335=W34=7249=servidor52=20150123-13:34:56.95756=cliente22=448=CERB001D55=CERB001D268=1269=0270=100271=1000290=110=239    
crack exception: Field not found

EDIT2:

当我将crack()函数放在try-catch块之外时,在message.event.log中我得到:

20150123-13:29:03.618 : 8=FIX.4.49=7035=A34=149=cliente52=20150123-13:29:03.61856=servidor98=0108=2010=077
20150123-13:29:03.655 : 8=FIX.4.49=7035=A34=149=servidor52=20150123-13:29:03.65856=cliente98=0108=2010=081
20150123-13:29:06.629 : 8=FIX.4.49=12235=W34=249=servidor52=20150123-13:29:06.63556=cliente22=448=CERB001D55=CERB001D268=1269=0270=100271=1000290=110=175

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的根源。

我从源代码安装了quickfix,似乎在较新版本的quickfix(1.14.0和最新版本)中,DataDictionaryProvadider.h中的某些内容与共享指针有关,而且似乎是导致问题的原因。当我从apt-get安装quickfix时,我得到了版本1.13.3,一切正常。

感谢所有试图提供帮助的人。