最近做的一个项目,需要读取华为一个叫iMaster NCE的网管软件的北向接口。这个iMaster NCE(以下简称NCE)用于管理项目的整个网络,尤其是光网络。业主要求我们访问该软件提供的对外接口,读取一些网络信息,比如网元、故障告警、性能等。
NCE的接口提供了多种协议的版本,给过来的资料是基于SOAP的WebService,据说目前最常用的http版本要收费。
基于SOAP的WebService,我以前用.NET的时候搞过。首先要在项目里访问WebService的WSDL,生成一个客户端(代理),然后本地通过此代理对接口进行访问。Java项目也是类似的套路。以下是d调用XML接口的开发步骤介绍,并附上一个读取NCE上告警信息数量的实例。
一、开发前准备
1、选择SOAP中间件
在开始开发之前,需要选择适当的SOAP中间件来实现WebService的客户端。
开源SOAP中间件主要包括:
Apache CXF
Apache AXIS
商业SOAP中间件主要包括:
IBM Websphere
BEA Weblogic
理论上可以自由选择任意符合SOAP规范的中间件以进行客户端的开发。华为选择Apache CXF作为服务端中间件,同时建议客户端也采用Apache CXF,以获得最大的兼容性。不过Apache CXF只支持使用JAVA作为编程语言。我们用的正是java,很自然就选用Apache CXF。
2、获取WSDL文件
接入XML接口,首先需要获取WSDL文件。获取WSDL的方式有两种,分别是使用发布文档中打包的WSDL文件,以及直接访问每一个XML接口所在服务地址来获取。可以通过北向XML接口服务地址获取WSDL,比如http://10.71.226.29:9997/ManagedElementRetrieval?wsdl
这种方式一次只能获取一种服务的WSDL。由于厂家直接给了所有WSDL,所以这一步就省了。
3、生成Stub代码
1)生成代码
获取到WSDL文件后,需要通过Apache CXF附带的wsdl2java工具将其转换成JAVA代码。wsdl2java可以到Apache CXF官网下载。需要注意的是,新的版本不支持JDK8,如果还是JDK8,最后的版本是apache-cxf-3.5.9。
生成语句示例:
apache-cxf不需安装,解压即用。
生成了一堆代码:

2)创建Stub代码项目
将生成的代码搭建一个项目,比如叫mtop项目。则可以将它生成一个jar包,比如叫mtop.jar。

3)应用Stub代码
然后将它放到我们读取NCE的项目中:


4、后面加入新的接口
上面只是生成了一个wsdl的Stub代码。如果后面需要加入新的wsdl,则如法炮制,先用wsdl2java生成Stub代码,然后将整个代码文件拷贝到Stub项目,遇到同名的忽略,不要覆盖,相当于只拷贝了新增的文件。然后重新生成jar包。
二、示例
以下是一个读取NCE告警数量的示例。
1、基本工具
2、应用示例
从下面密密麻麻的import可以看出,大部分都是引用Stub代码的。
对应的NCE XML接口说明


三、总结
NCE的XML接口感觉就是异常繁琐,数据类型非常多,传参、返回值都非常复杂。如果是http接口的话,参数全部是json,结构简单明了。而且,利用XML传数据,少量数据还好,大批量数据就不行,XML相比json,实在笨重,传输量太大了。
华为这个nce软件,叫网管软件,它接管了整个局域网,然后在上面做各种逻辑划分和管理。不过,它加载需要一段时间。比如我们项目,设备通电以后,20分钟后网络才能访问。再上面做一些更改,比如用户解锁,要约2个小时才生效。之前遇到明明用户已经解锁了,还是不能登录,正疑惑的时候,忽然就可以了。这时已经过去了2个小时。
所有评论(0)