Linux下SOAP工具生成ONVIF框架

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

如果以上失败,请验证您是否拥有:

  • 安装了Automake工具(make和GNU m4)
  • Bison从www.gnu.org/software/bison或Yacc 安装
  • Flex从flex.sourceforge.net安装
  • 来自www.openssl.org的 OpenSSL www.gnu.org/software/gnutls的 GNUTLS,或者您必须禁用SSL
  • 可选的Zlib支持从www.zlib.net压缩
三、生成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   

你可能感兴趣的:(ONVIF)