Huawei T2000 Corba 接口客户端开发

步骤1:

1、根据idl生成客户端代理(stub)和服务器框架(skeleton)

idl来源《OptiX iManager T2000 V200R007C03 Northbound CORBA Interface Reference Guide》

执行下面的命令来生成客户端代理(stub)和服务器框架(skeleton)
idlj -f all myIDL.idl
-f参数用来指定生成的内容,all包括客户端的本地代理和服务器框架。如果不加-f all参数的话,不会生成POA那个类。

"%JAVA_HOME%"\bin\idlj.exe -f all CosEventChannelAdmin.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosEventComm.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNaming.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotification.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyChannelAdmin.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyComm.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyFilter.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosTrading.idl
"%JAVA_HOME%"\bin\idlj.exe -f all orb.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CircuitCutMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all common.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosEventChannelAdmin.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosEventComm.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNaming.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotification.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyChannelAdmin.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyComm.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosNotifyFilter.idl
"%JAVA_HOME%"\bin\idlj.exe -f all CosTrading.idl
"%JAVA_HOME%"\bin\idlj.exe -f all emsMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all emsSession.idl
"%JAVA_HOME%"\bin\idlj.exe -f all emsSessionFactory.idl
"%JAVA_HOME%"\bin\idlj.exe -f all encapsulationLayerLink.idl
"%JAVA_HOME%"\bin\idlj.exe -f all equipment.idl
"%JAVA_HOME%"\bin\idlj.exe -f all flowDomain.idl
"%JAVA_HOME%"\bin\idlj.exe -f all flowDomainFragment.idl
"%JAVA_HOME%"\bin\idlj.exe -f all globaldefs.idl
"%JAVA_HOME%"\bin\idlj.exe -f all guiCutThrough.idl
"%JAVA_HOME%"\bin\idlj.exe -f all HW_controlPlaneMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all HW_mstpInventoryMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all HW_mstpProtectionMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all HW_mstpServiceMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all HW_securityMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all maintenanceOps.idl
"%JAVA_HOME%"\bin\idlj.exe -f all managedElement.idl
"%JAVA_HOME%"\bin\idlj.exe -f all managedElementManager.idl
"%JAVA_HOME%"\bin\idlj.exe -f all mtnmVersion.idl
"%JAVA_HOME%"\bin\idlj.exe -f all multiLayerSubnetwork.idl
"%JAVA_HOME%"\bin\idlj.exe -f all nmsSession.idl
"%JAVA_HOME%"\bin\idlj.exe -f all notifications.idl
"%JAVA_HOME%"\bin\idlj.exe -f all orb.idl
"%JAVA_HOME%"\bin\idlj.exe -f all performance.idl
"%JAVA_HOME%"\bin\idlj.exe -f all protection.idl
"%JAVA_HOME%"\bin\idlj.exe -f all session.idl
"%JAVA_HOME%"\bin\idlj.exe -f all subnetworkConnection.idl
"%JAVA_HOME%"\bin\idlj.exe -f all terminationPoint.idl
"%JAVA_HOME%"\bin\idlj.exe -f all topologicalLink.idl
"%JAVA_HOME%"\bin\idlj.exe -f all topologyManagementMgr.idl
"%JAVA_HOME%"\bin\idlj.exe -f all trafficDescriptor.idl
"%JAVA_HOME%"\bin\idlj.exe -f all transmissionParameters.idl

由于flowDomain.idl存在bug,因此需要修正。

搜索flowDomain.idl中的关键字flowDomain

找到

   void getFlowDomain(
         in globaldefs::NamingAttributes_T fdName,
         out FlowDomain_T flowDomain)
      raises(globaldefs::ProcessingFailureException);

再找

   void getFDfromMFD(
         in globaldefs::NamingAttributes_T mfdName,
         out FlowDomain_T flowDomain )
      raises(globaldefs::ProcessingFailureException);

将红体字的flowDomain修改为flowDomains

 

2、eclipse中新建java项目,将生成的java文件复制到src目录下

 

3、新建类test/NmsSessionImpl.java,父类为NmsSession_IPOA

 

4、新建类test/ClientTest.java,选中“public static void main(String args[])”

内容如下:

package test



import java.io.UnsupportedEncodingException;

import java.util.Date;



import managedElement.ManagedElementIterator_IHolder;

import managedElement.ManagedElementList_THolder;

import managedElement.ManagedElement_T;

import managedElementManager.ManagedElementMgr_I;

import managedElementManager.ManagedElementMgr_IHelper;

import multiLayerSubnetwork.SubnetworkIterator_IHolder;

import multiLayerSubnetwork.SubnetworkList_THolder;

import nmsSession.NmsSession_I;

import nmsSession.NmsSession_IPOA;

import notifications.EventIterator_IHolder;

import notifications.EventList_THolder;

import notifications.PerceivedSeverity_T;

import org.omg.CORBA.Any;

import org.omg.CORBA.IntHolder;

import org.omg.CORBA.ORB;   

import org.omg.CORBA.Policy;

import org.omg.CORBA.SystemException;   

import org.omg.PortableServer.POA;

import org.omg.PortableServer.POAHelper;

import org.omg.PortableServer.POAManagerPackage.AdapterInactive;

import org.omg.PortableServer.POAPackage.AdapterAlreadyExists;

import org.omg.PortableServer.POAPackage.InvalidPolicy;



import common.Common_IHolder;



import CosNaming.NameComponent;   

import CosNaming.NamingContext;   

import CosNaming.NamingContextHelper;   

import CosNotification.Property;

import CosNotification.StructuredEvent;

import CosNotifyChannelAdmin.AdminLimitExceeded;

import CosNotifyChannelAdmin.AdminNotFound;

import CosNotifyChannelAdmin.ClientType;

import CosNotifyChannelAdmin.ConsumerAdmin;

import CosNotifyChannelAdmin.EventChannel;

import CosNotifyChannelAdmin.EventChannelHolder;

import CosNotifyChannelAdmin.ProxySupplier;

import CosNotifyChannelAdmin.StructuredProxyPushSupplier;

import CosNotifyChannelAdmin.StructuredProxyPushSupplierHelper;

import emsMgr.EMSMgr_I;   

import emsMgr.EMSMgr_IHelper;

import emsMgr.EMS_T;

import emsMgr.EMS_THolder;

import emsSession.EmsSession_I;   

import emsSession.EmsSession_IHolder;   

import emsSession.EmsSession_IPackage.managerNames_THolder;

import emsSessionFactory.EmsSessionFactory_I;   

import emsSessionFactory.EmsSessionFactory_IHelper;   

import equipment.EquipmentInventoryMgr_I;

import globaldefs.NameAndStringValue_T;

import globaldefs.ProcessingFailureException;



public class ClientTest {   

	static ORB orb;     

	static EMSMgr_I emsMgr = null;     

	static EquipmentInventoryMgr_I equipmentInventoryMgr = null;

	static EmsSession_I emsSession=null;     



	static EMS_THolder emsHolder = null; 

	static EMS_T ems = null;  



	static EventChannel notifChannel = null; 

	static EventChannelHolder chanHolder = new EventChannelHolder(); 



	static ConsumerAdmin cadmin = null;

	static IntHolder id = null;

	static ProxySupplier baseSupplier = null;

	static StructuredProxyPushSupplier structuredProxyPushSupplier = null;



	static ManagedElementMgr_I managedElementMgr=null;



	static StructuredPushConsumerImpl structProxyPushConsumer = null;

	static POA rpoa = null;

	static POA poa = null;



	static Date start_time=new Date();	

	static Date end_time=new Date();	





	public static void testCorba() throws UnsupportedEncodingException{     

		//建立连接登录、建立消息通道    

		try {    

			String[] args = new String[2];   

			args[0] = "-ORBInitRef";   

			args[1] = "NameService=corbaloc::10.0.1.1:12001/NameService";		

			orb = org.omg.CORBA.ORB.init(args, null);    

		} catch (SystemException ex) {     

			System.out.println("初始化ORB对象异常!");    

		}     



		NamingContext namingContext = null;    

		org.omg.CORBA.Object objRef = null;   

		try {    

			objRef = orb.resolve_initial_references("NameService");   

			namingContext = NamingContextHelper.narrow(objRef);   

			System.out.println("获取取名字服务成功:"+namingContext);

		}catch (org.omg.CORBA.ORBPackage.InvalidName ex) {    

			System.out.println("获取名字服务索引异常!");   

			ex.printStackTrace();   

		}    



NameComponent[] path = new NameComponent[5]; path[0] = new NameComponent("TMF_MTNM", "Class"); path[1] = new NameComponent("HUAWEI", "Vendor"); path[2] = new NameComponent("Huawei/T2000", "EmsInstance"); path[3] = new NameComponent("2.0", "Version"); path[4] = new NameComponent("Huawei/T2000", "EmsSessionFactory_I");


		EmsSessionFactory_I emsSessionFactory_I = null;   

		org.omg.CORBA.Object obj = null;   

		try{   			

			obj = namingContext.resolve(path);   

			System.out.println("obj=>"+obj);   

			emsSessionFactory_I = EmsSessionFactory_IHelper.narrow(obj);   

			System.out.println("emsSessionFactory_I=>"+emsSessionFactory_I);   

		}catch(Exception e){   

			e.printStackTrace();   

		}



		EmsSession_IHolder sessionHolder = new EmsSession_IHolder();   



		//Log In and Retrieve EmsSession

		try {

		

			

NmsSession_IPOA pNmsSessionServant = new NmsSessionImpl();

		

			NmsSession_I nmsSession =  pNmsSessionServant._this(orb);			



			//用户名,密码   

			if (emsSessionFactory_I != null){

				emsSessionFactory_I.getEmsSession("test","test", nmsSession, sessionHolder);

				System.out.println("NMSsession ---" + nmsSession.toString()+"\nVersion:"+emsSessionFactory_I.getVersion());

				emsSession = sessionHolder.value; 



			}

			else{

				return;				

			}



		}catch (globaldefs.ProcessingFailureException ex) {     



			 

			System.out.println("获取EmsSession引用对象,异常!---ProcessingFailureException---");    

			System.out.println("可能是用户名或者密码错误,或者权限不够[Corba OSS用户],或者已登陆的用户还未退出!");    

			System.out.println(ex.toString());

			 



			showMessage(ex.errorReason);

		}  





		Common_IHolder common_IHolder = new Common_IHolder();   

		try {   



			//Retrieve List of Managers

			managerNames_THolder supportedManagerList = new managerNames_THolder();

			emsSession.getSupportedManagers(supportedManagerList);

			String []managers=supportedManagerList.value; 

			for (int i = 0; i < managers.length; i++ ) 

			{ 

				System.out.print("Manager "); 

				System.out.print(i); 

				System.out.println(" " + managers[i]); 

			}



 





			//返回所有网元

			emsSession.getManager("ManagedElement",common_IHolder);

			managedElementMgr=ManagedElementMgr_IHelper.narrow(common_IHolder.value);			

			ManagedElementList_THolder meList=new ManagedElementList_THolder();

			ManagedElementIterator_IHolder meIt=new ManagedElementIterator_IHolder();

			managedElementMgr.getAllManagedElements(how_many, meList, meIt);

			ManagedElement_T[] me= meList.value;

			for (int i = 0; i < me.length; i++ ) {

				String nativeEMSName=me[i].nativeEMSName;

				String procuctName=me[i].productName;

				NameAndStringValue_T[] name=me[i].name;					

				showMessage(nativeEMSName+","+procuctName+","+name[0].name+"|"+name[0].value+","+name[1].name+"|"+name[1].value);				

			}





 



			/*

			//获取网元信息

			emsSession.getManager("EquipmentInventory",common_IHolder);

			equipmentInventoryMgr = EquipmentInventoryMgr_IHelper.narrow(common_IHolder.value);		

			emsHolder = new EMS_THolder();			



			NameAndStringValue_T[] meOrHolderName=new NameAndStringValue_T[2];

	

meOrHolderName[0]=new NameAndStringValue_T(); meOrHolderName[0].name="EMS"; meOrHolderName[0].value="Huawei/T2000"; meOrHolderName[1]=new NameAndStringValue_T(); meOrHolderName[1].name="ManagedElement"; meOrHolderName[1].value="3145790";

			EquipmentOrHolderList_THolder eqList=new EquipmentOrHolderList_THolder();

			EquipmentOrHolderIterator_IHolder eqIt=new EquipmentOrHolderIterator_IHolder();

			start_time=new Date();						

			equipmentInventoryMgr.getAllEquipment(meOrHolderName, how_many, eqList, eqIt);

			end_time=new Date();

			System.out.println("getAllEquipment:"+start_time.toString()+"-"+end_time.toString());



			EquipmentOrHolder_T[] equipments=eqList.value;

			for (int i=0;i< equipments.length;i++ ){								

				try{

					EquipmentHolder_T equipmentHolder=equipments[i].holder();

					String holderType=equipmentHolder.holderType;

					String nativeEMSName=equipmentHolder.nativeEMSName;

					NameAndStringValue_T[] name=equipmentHolder.name;			

					showMessage(holderType+","+nativeEMSName+","+name[0].name+"|"+name[0].value+","+name[1].name+"|"+name[1].value);

				}

				catch(Exception e){

					continue;



				}





			}



			 */





			/*

			//查询网管系统中所有未结束的告警和未结束的TCA 事件

			String[] excludeProbCauseList=new String[0];

			PerceivedSeverity_T[] excludeSeverityList=new PerceivedSeverity_T[0];

			EventList_THolder eventList=new EventList_THolder();

			EventIterator_IHolder eventIt=new EventIterator_IHolder();

			how_many=10;

			start_time=new Date();

			emsMgr.getAllEMSAndMEActiveAlarms(excludeProbCauseList, excludeSeverityList, how_many, eventList, eventIt);

			end_time=new Date();

			System.out.println("getAllEMSAndMEActiveAlarms:"+start_time.toString()+"-"+end_time.toString());



			StructuredEvent[] events= eventList.value;

			for (int i=0;i<events.length;i++){				

				Property[] propertyList= events[i].filterable_data;

				showMessage("event:"+i);

				for (int j=0;j<propertyList.length;j++){

					try{

						showMessage("	"+propertyList[j].name+","+ propertyList[j].value);

						Object prop_obj=propertyList[j].value.extract_Object();

					}

					catch(Exception e){

						continue;

					}

				}



			}

			 */

 





		} catch (ProcessingFailureException e) {   

			System.out.println("Processing Exception" + e.getMessage()); 

			e.printStackTrace();   

			showMessage(e.errorReason);

		}

		finally{

			emsSession.endSession();

		}





	}   

 



	/**

	 * @param msg

	 * @throws UnsupportedEncodingException

	 * 编码转换,以显示中文

	 */

	public static void showMessage(String msg) throws UnsupportedEncodingException  {

		byte[] bytes=msg.getBytes("ISO-8859-1");		

		String rlt = new String(bytes, "GBK");			

		System.out.println(rlt);	

	} 



	public static String decodeText(String src) throws UnsupportedEncodingException  {

		byte[] bytes=src.getBytes("ISO-8859-1");		

		String rlt = new String(bytes, "GBK");			

		return rlt;	

	} 



	public static void main(String[] args) throws UnsupportedEncodingException {   

		testCorba();    

	}   

}  









 



/**

 * 前提:

 * 1.license支持Corba

 * 2.Corba服务开启:12001,12002,12003端口

 * 3.可正常访问系统的用户名及密码(该用户当前未登陆)

 * 4.客户端程序所在客户机的IP在“访问控制列表”允许的范围内

 * 

 */

你可能感兴趣的:(corba)