Hello One of our application teams is having an issue with a particular RIC that was working until 2 weeks ago. Now they have reported that the below code is throwing an error. They have asked what could be the causes of this throwing an error. I work for the TREP infrastructure and have captured the conversation (all below) between sink application and ads server this RIC which is called SONIAOSR= as well as another RIC that works which is called RONIAOSR=
void processData(const ::rfa::common::Data& payload, const ::rfa::sessionLayer::OMMItemEvent& ie)
if ( ie.getClosure() != (&ric) )
LOG_CB_ERROR( "WARNING: RicData event has different closure for " << service.c_str() << "/" << ric.c_str() << " !!!" );
const ::rfa::common::Msg& msg = ie.getMsg();
const ::rfa::message::RespMsg& respMsg = static_cast<const ::rfa::message::RespMsg&>(msg);
if ( respMsg.getMsgModelType() != ::rfa::rdm::MMT_MARKET_PRICE )
if ( result.getType() == cb::rfa::RfaValue::vtEmpty )
result.reset( env.decoder.decodeData( payload ).release() ); //------ This throws an error for SONIAOSR=
CB_LOG_LEVEL( "RicData received multiple times, ignoring later values", 3 );
For SONIAOSR=, please see the attached file: trace.txt.
They are using rfa7.6.1.L1.solaris
The data dictionary (RDMFieldDictionary and enumtype.def) might not be up to date. It is possible that some fields might be added.
RFA will throw an invalid usage exception, if an application tries to get field's definition for a Field ID that is not in the dictionary. You may update the dictionary used by the application. If the application downloads dictionary from server, the dictionary files needs to be updated on the server. Otherwise, the local dictionary files should be updated.
However, we would recommend adding a try/catch block to catch the exception, so you can get the detail information about the exception.