另:编译工具VS2012,TAO和ACE的编译工具是VS2013(下载的ACE、TAO版本比较高一点)。
这是厂家提供的数据类型:
Conent of the request"push_structured_event":
in:notification
IDL:omg.org/CosNotification/StructuredEvent:1.0
{
header : IDL:omg.org/CosNotification/EventHeader:1.0
{
fixed_header : IDL:omg.org/CosNotification/FixedEventHeader:1.0
{
event_type : IDL:omg.org/CosNotification/EventType:1.0
{
domain_name : String: tmf_mtnm ,
type_name : String: NT_ALARM
} ,
event_name : String: alarmRecordAutoReport
} ,
variable_header : Sequence: Sequence of length: 0 ()
} ,
filterable_data : Sequence: Sequence of length: 20 (
IDL:omg.org/CosNotification/Property:1.0
{
name : String: notificationId ,
value : String: 6
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: objectName ,
value : IDL:mtnm.tmforum.org/globaldefs/NamingAttributes_T:1.0: Sequence of length: 2
(
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: EMS ,
value : String: EMSName
} ;
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: ManagedElement ,
value : String: 192.192.10.254
}
)
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: nativeEMSName ,
value : String: /EMS=EMSName/ManagedElement=192.192.10.254
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: nativeProbableCause ,
value : String: NE_COMMU_BREAK
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: objectType ,
value : IDL:mtnm.tmforum.org/notifications/ObjectType_T:1.0: OT_MANAGED_ELEMENT
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: emsTime ,
value : String:
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: neTime ,
value : String: 2013-11-29 08:54:05
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: isClearable ,
value : String: 1
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: layerRate ,
value : Short: 0
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: probableCause ,
value : String: NE_COMMU_BREAK
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: probableCauseQualifier ,
value : String: NE_COMMU_BREAK
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: perceivedSeverity ,
value : IDL:mtnm.tmforum.org/notifications/PerceivedSeverity_T:1.0: PS_CRITICAL
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: serviceAffecting ,
value : IDL:mtnm.tmforum.org/notifications/ServiceAffecting_T:1.0: SA_UNKNOWN
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: affectedTPList ,
value : String:
} ;
IDL:omg.org/CosNotification/Property:1.0{
name : String: additionalText ,
value : IDL:mtnm.tmforum.org/globaldefs/NVSList_T:1.0: Sequence of length: 2
(
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: REMARK ,
value : String:
} ;
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: AlmText ,
value : String: NE_COMMU_BREAK
}
)
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: additionalInfo ,
value : IDL:mtnm.tmforum.org/globaldefs/NVSList_T:1.0: Sequence of length: 2
(
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: status ,
value : String: 3
} ;
IDL:mtnm.tmforum.org/globaldefs/NameAndStringValue_T:1.0
{
name : String: serverTime ,
value : String: 2014-08-08 11:15:44
}
)
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: EventType ,
value : String: COMMUNICATIONS ALARM
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: acknowledgeIndication ,
value : String: 1
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: CorrelatedNotifications ,
value : String: 0
} ;
IDL:omg.org/CosNotification/Property:1.0
{
name : String: objectNameText ,
value : String: /EMS=EMSName/ManagedElement=192.192.10.254
}
) ,
remainder_of_body : null
}
这是自己写的连接、查询、返回数据解析代码:
int argc = 2;
char *argv[2] = {0, 0};
argv[0] = "-ORBInitRef";
argv[1] = "NameService=corbaloc::192.192.4.200:6350/NameService";
g_orb = CORBA::ORB_init(argc, argv);
CORBA::Object_var nsobj = g_orb->resolve_initial_references("NameService");
CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(nsobj.in());
if (CORBA::is_nil(namingContext.in()))
{
_debug_to(_T("oops, cannot access the Naming Services!"));
}
CosNaming::Name path;
path.length(5);
path[0].id = CORBA::string_dup("TMF_MTNM");
path[0].kind = CORBA::string_dup("class");
path[1].id = CORBA::string_dup("ATRIE");
path[1].kind = CORBA::string_dup("vendor");
path[2].id = CORBA::string_dup("ATRIE");
path[2].kind = CORBA::string_dup("EmsInstance");
path[3].id = CORBA::string_dup("2.1");
path[3].kind = CORBA::string_dup("Version");
path[4].id = CORBA::string_dup("EmsSessionFactory");
path[4].kind = CORBA::string_dup("EmsSessionFactory_I");
g_obj = namingContext->resolve(path);
emsSessionFactory::EmsSessionFactory_I_var emsSessionFactory_I = emsSessionFactory::EmsSessionFactory_I::_narrow(g_obj);
emsSession::EmsSession_I_var sessionHolder = emsSession::EmsSession_I::_narrow(g_obj);
nmsSession::NmsSession_I_var pNmsSessionServant = nmsSession::NmsSession_I::_narrow(g_obj);
emsSessionFactory_I->getEmsSession("nbif", "Admin123",pNmsSessionServant, sessionHolder);
emsSession::EmsSession_I *emsSession_I = sessionHolder._retn();
if (emsSession_I != NULL)
{
common::Common_I_var common_IHolder = common::Common_I::_narrow(emsSession_I);
emsSession_I->getManager("EmsMgr", common_IHolder);
common::Common_I *common_I = common_IHolder._retn();
std::tstring LogStr = _T("EmsMgr信息:");
if (common_I != NULL)
{
emsMgr::EMSMgr_I_var emsMgr_IHolder = emsMgr::EMSMgr_I::_narrow(common_I);
emsMgr::EMSMgr_I *emsMgr_I = emsMgr_IHolder._retn();
if (emsMgr_I != NULL)
{
notifications::ProbableCauseList_T ProbList;
notifications::PerceivedSeverityList_T SecList;
unsigned long count = 1000;
notifications::EventList_T_var EventList;
notifications::EventIterator_I_var EventIt;
//查询所有EMS和网元的告警
emsMgr_I->getAllEMSAndMEActiveAlarms(ProbList, SecList, count, EventList, EventIt);
CosNotification::StructuredEvent *m_pSEInfo = EventList->get_buffer();
//解析
int iEventLen = EventList->length();//长度36
if (m_pSEInfo != NULL)
{
for (int iEventIndex = 0; iEventIndex < iEventLen; iEventIndex++)
{
CosNotification::FilterableEventBody m_FEBody = m_pSEInfo[iEventIndex].filterable_data;
int bodyLen = m_FEBody.length();//长度20,每个告警信息由20个属性信息
CosNotification::Property *m_pProInfo = m_FEBody.get_buffer();
for (int bodyindex = 0; bodyindex < bodyLen; bodyindex++)
{
std::string strName, strValue;
wchar_t *ws;
unsigned int b = 1024;
strName = m_pProInfo[bodyindex].name;
CosNotification::PropertyValue m_Info = m_pProInfo[bodyindex].value;
CORBA::Any m_any = m_Info;
//convertAttribute(attributeName, m_any.extract_string())//这是Java的解析数据的函数,但是c++里边没有提供
/***这里开始就是解析的,需要解析成不同的类型,参照上边厂家提供的资料*/
ACE_CDR::WChar *wc = new ACE_CDR::WChar[512];
CORBA::Any::to_wstring TempStr(wc, 512);
m_any>>=(TempStr);
TAO::Any_Impl *m_impl = m_Info.impl();
TAO_OutputCDR m_outcdr;
m_impl->marshal_value(m_outcdr);
const char *m_poutbuffer = m_outcdr.buffer();
int outcdrlen = m_outcdr.length();
bool encodFlag = m_impl->encoded();
CORBA::TypeCode_ptr m_typeCode;
m_typeCode = m_impl->type();
CORBA::TCKind strtype = m_typeCode->kind();
CORBA::String_var m_typeid = m_typeCode->id();
CORBA::String_var m_typename = m_typeCode->name();
}
}
}
}
}
}
主要是CORBA::Any m_any = m_pProInfo[bodyindex].value;CORBA::Any类型不好解析,我找了许多资料都不行,求大神提供一些方案,不胜感激。qq:897672428
6 个解决方案
#1
莫非楼主就是那位“最后一个CORBAer”!
#2
没有,公司项目需要,正好了解下,但是卡在这里了
#3
up~~~~~~~~~~~~~~~~~~~~~
#4
告诉你的头,换一个供应厂商吧!
Corba 不提供 C++ 模式的。
而 Corba 没有流行起来就是他们是基于 C 的,太复杂了。
Corba 不提供 C++ 模式的。
而 Corba 没有流行起来就是他们是基于 C 的,太复杂了。
#5
我讨厌 Corba 是因为他们使用了一个不该她们使用的 IDL 。
早年我在网上搜索 IDL 总是他们的。
而我需要的是 接口的定义语言。
早年我在网上搜索 IDL 总是他们的。
而我需要的是 接口的定义语言。
#6
不,我只想把corba::any中的数据拿到,然后完成这个项目,发丝再也不会主动去看corba了
#1
莫非楼主就是那位“最后一个CORBAer”!
#2
没有,公司项目需要,正好了解下,但是卡在这里了
#3
up~~~~~~~~~~~~~~~~~~~~~
#4
告诉你的头,换一个供应厂商吧!
Corba 不提供 C++ 模式的。
而 Corba 没有流行起来就是他们是基于 C 的,太复杂了。
Corba 不提供 C++ 模式的。
而 Corba 没有流行起来就是他们是基于 C 的,太复杂了。
#5
我讨厌 Corba 是因为他们使用了一个不该她们使用的 IDL 。
早年我在网上搜索 IDL 总是他们的。
而我需要的是 接口的定义语言。
早年我在网上搜索 IDL 总是他们的。
而我需要的是 接口的定义语言。
#6
不,我只想把corba::any中的数据拿到,然后完成这个项目,发丝再也不会主动去看corba了