gsoap生成ONVIF代码

 

获取gsoap工具

gsoap下载地址:

 

https://sourceforge.net/projects/gsoap2/

 

gsoap生成ONVIF代码

 

    下载解压后,可以在gsoap\bin\win32里找到wsdl2h.exe和soapcpp2.exe两个文件

  1. wsdl2h.exe: 根据WSDL生成C/C++风格的头文件
  2. soapcpp2.exe: 根据头文件自动生成调用远程SOAP服务的客户端代码(Stub)和提供SOAP服务的框架代码(Skeleton),另外也能从头文件生成WSDL文件

gsoap/stdsoap2.cpp是gSOAP的核心代码,在需要使用的项目中包含该文件及由soapcpp2.exe生成的代码即可。另外还有个stdsoap2.c,用于使用纯C项目。

 

解压后目录:

gsoap生成ONVIF代码

wsdl文件下载

https://www.onvif.org/profiles/specifications/

 

    该官网上面没有具体的下载链接,下载方式如下: 根据业务需要,选择相应的wsdl文件,右击该文件——>目标另存为——>保存到本地的某个文件夹中(例如makeClientCode文件夹)就行了。

gsoap生成ONVIF代码

 

可以选择需要的WSDL文件,也可以全部下载下来:

 

gsoap生成ONVIF代码

 

注:由于是离线生成代码,在下载的WSDL中搜索 schemaLocation ,将该选项内的网址或路径改为当前目录的文件。如果是网址,将对应的文件下载下来放到当前目录即可。例如:

(1)将路径修改为当前目录 schemaLocation="onvif.xsd"

修改前:

gsoap生成ONVIF代码

修改后:

gsoap生成ONVIF代码

 

(2)将web网址下载后放到当前目录,并在WSDL里修改为当前目录

修改前:

gsoap生成ONVIF代码

修改后:

gsoap生成ONVIF代码

 

gsoap生成ONVIF代码

 

使用wsdl2h工具生成头文件

(1)将 gsoap\bin\win32 下面的两个工具拷到WSDL文件同目录,这里以 makeClientCode 目录为例

 

(2)将 gsoap\typemap.dat 文件拷到WSDL文件同目录

 

(3)进入windows 命令行窗口,进入到WSDL文件的目录执行如下命令即可生成头文件

 

wsdl2h.exe -o onvif.h -t ./typemap.dat accesscontrol.wsdl accessrules.wsdl actionengine.wsdl advancedsecurity.wsdl analytics.wsdl analyticsdevice.wsdl authenticationbehavior.wsdl credential.wsdl deviceio.wsdl devicemgmt.wsdl display.wsdl doorcontrol.wsdl event.wsdl imaging.wsdl media.wsdl media2.wsdl provisioning.wsdl ptz.wsdl receiver.wsdl recording.wsdl replay.wsdl schedule.wsdl search.wsdl thermal.wsdl

 

命令行各参数可通过wsdl2h -help查看

gsoap生成ONVIF代码

 

注意事项:

 

(1)需要将wsdl文件中在<schemaLocation>内出现的网址改为本地路径

 

(2)修改生成的.h文件,如果需要包含onvif 的鉴权功能,需要手动加上 #import "wsse.h"

gsoap生成ONVIF代码

 

使用soapcpp2.exe从头文件生成代码

(1)将 gsoap\custom 和 gsoap\import 两个目录拷贝到WSDL文件同目录下。

 

(2)执行命令行生成代码,(我这里只需要客户端代码)

 

   soapcpp2.exe -2 -C -i -x -Iimport -Icustom onvif.h

 

同样可查看命令帮助 soapcpp2.exe -help

gsoap生成ONVIF代码

 

可以生成客户端和服务端代码

 

注意事项

 

(1)拷贝几个文件夹

gsoap生成ONVIF代码

 

提取需要的文件进行编程

除了生成的代码,可能还需要gsoap工具目录的一些文件,例如:

文件gsoap-2.8\gsoap\dom.c

 文件gsoap-2.8\gsoap\custom\duration.c

 文件gsoap-2.8\gsoap\custom\duration.h

 文件gsoap-2.8\gsoap\plugin\mecevp.c

 文件gsoap-2.8\gsoap\plugin\mecevp.h

 文件gsoap-2.8\gsoap\plugin\smdevp.c
文件gsoap-2.8\gsoap\plugin\smdevp.h

文件gsoap-2.8\gsoap\stdsoap2.h

文件gsoap-2.8\gsoap\stdsoap2.c

文件gsoap-2.8\gsoap\plugin\threads.c

文件gsoap-2.8\gsoap\plugin\threads.h

文件gsoap-2.8\gsoap\plugin\wsaapi.c

文件gsoap-2.8\gsoap\plugin\wsaapi.h

文件gsoap-2.8\gsoap\plugin\wsseapi.h

 文件gsoap-2.8\gsoap\plugin\wsseapi.c

 

将这些代码与生成的代码放一起即可以使用