Linux下SOAP工具生成ONVIF框架

2019-07-13 09:02发布

Linux下SOAP工具生成ONVIF框架

一、相关地址

Gsoap下载地址1https://zh.osdn.net/projects/sfnet_gsoap2/releases/ Gsoap下载地址2https://sourceforge.net/projects/gsoap2/ Gsoap安装说明:https://www.genivia.com/downloads.html ONVIF官网WSDL:https://www.onvif.org/profiles/specifications/ ONVIF官网APIhttps://www.onvif.org/onvif/ver20/util/operationIndex.html 文章出处:http://blog.csdn.net/zerolity/article/details/76442564
二、linux下安装 1、soap下载最新soap,此处gsoap2.8.50版本 2、在linux下解压,然后进入到解压后的目录gsoap-2.8; ① ./configure ② make ③ sudo make install 如果以上失败,请验证您是否拥有: 三、生成ONVIF框架 1、建立一个新目录 ①把/usr/local/bin/ 下刚才生成的wsdl2h 和 soapcpp2拷贝到当前目录下 ②把gsoap-2.8/gsoap/typemap.dat也拷贝到当前目录下 ③把gsoap-2.8/gsoap/WS/WS-Discovery.wsdl拷贝至当前目录下 2、执行命令,生成onvif.h: 两种方法:在线生成和离线生成 a、在线生成快捷,但是,一般网络不好的会断开。此处小方法解决:自己手机开个wifi给笔记本。速度杠杠的!(我用的这种) 命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl  https://www.onvif.org/ver10/events/wsdl/event.wsdl https://www.onvif.org/ver10/pacs/accesscontrol.wsdl https://www.onvif.org/ver10/pacs/accessrules.wsdl https://www.onvif.org/ver10/actionengine.wsdl https://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl http://www.onvif.org/ver10/credential/wsdl/credential.wsdl https://www.onvif.org/ver10/deviceio.wsdl https://www.onvif.org/ver10/display.wsdl https://www.onvif.org/ver10/pacs/doorcontrol.wsdl https://www.onvif.org/ver20/imaging/wsdl/imaging.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl https://www.onvif.org/ver20/media/wsdl/media.wsdl https://www.onvif.org/ver10/provisioning/wsdl/provisioning.wsdl https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl https://www.onvif.org/ver10/receiver.wsdl https://www.onvif.org/ver10/recording.wsdl https://www.onvif.org/ver10/search.wsdl https://www.onvif.org/ver10/replay.wsdl http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl https://www.onvif.org/ver10/thermal/wsdl/thermal.wsdl  https://www.onvif.org/ver10/analyticsdevice.wsdl b、离线,到onvif官网wsdl去把所有的或者你想要的,右键,下载下来。 (这个注意还要下xsd文件,下了还要改wdml里面schemaLocation元素,把他的路径改为你下载的xsd文件位置,我弄过一次,巨麻烦。 还是建议在线生成方便。) 命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat *wsdl 生成过程有错的,网上百度,这儿是一番风顺,估计版本新的原因吧。 3、生成框架文件 ①生成onvif.h成功后,打开生成的onvif.h 在#import 那加入一行代码 #import "wsse.h"用于鉴权 运行:./soapcpp2 -2 -c -x onvif.h -I ../gsoap-2.8/gsoap/:../gsoap-2.8/gsoap/import/:../gsoap-2.8/gsoap/custom/:../gsoap-2.8/gsoap/plugin/ -I 后面的gsoap路径自己对应修改。
如果直接生成对应C的库文件会发生重复定义错误,可以修改该文件。 wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274 打开文件gsoap_2.8.16/gsoap-2.8/gsoap/import/ wsa5.h 将277行int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex 或是将这个结构体直接注释的方式(别用if 0方法注释,还是会报错),最后的结果是,都可以使用。
同时上一步生成的onvif.h文件中没有打开wsse.h, 导致最后生成代码中SOAP_ENV__Header 结构体中缺少定义 wsse__Security数据段,无法进行鉴权命令。

生成成功! 所有扩展名nsmap都是一样的,留下一个更名为wsdd.nsmap,其余nsmap删掉。再把soap-2.8下面的一些文件拷贝过来,最后所需文件如下所示: duration.c  soapClient.c  soapH.h   soapStub.h  stdsoap2.h   wsdd.nsmap  duration.h  soapC.c  soapServer.c stdsoap2.c