使用gSOAP工具生成onvif框架代码

时间:2022-11-12 20:02:24
<工具产生背景>
         由于SOAP是一种基于xml的文件,手动编写SOAP文件太机械耗时,在这种背景下产生了gSAOP 这个工具,用于生成各种类型的代码,目前支持C/C++,如果索引ONVIF框架代码就会发现,代码中最主要的工作是将程序中的数据生成xml文件,或者是将xml文件中的数据解析成程序中的数据。

<准备工作>
➤工具下载 
        到网站https://www.genivia.com/dev.html下载相应工具,目前最新的版本是gSOAP 2.8.53 但是该官网需要密匙才能下载,所以还是到csdn上面去找。
使用gSOAP工具生成onvif框架代码
    或者到gsoap官网https://sourceforge.net/projects/gsoap2/下载最新版gsoap(本次版本为gsoap_2.8.17)并解压。
使用gSOAP工具生成onvif框架代码
 ➤下载wsdl文件
       到ONVF官网https://www.onvif.org/profiles/specifications/下载最新的wsdl文件。
使用gSOAP工具生成onvif框架代码
 
该官网上面没有具体的下载链接,所以有一个技巧,如果想要查看该wsdl文件中各个数据的含义,可以单击该文件链接。
使用gSOAP工具生成onvif框架代码
 下载wsdl文件,根据业务需要,选择相应的wsdl文件,右击该文件链接——>选择另存为——>保存到本地的某个文件夹中就行了。

➤新建工作空间

新建一个文件夹叫wsdl2h.exe soapcpp2.exe,解压的gsoap_2.8.17文件夹,将

(1)goap_2.8.17\gsoap-2.8\gsoap 路径下的typemap.dat

(2)gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32 路径下的wsdl2h.exe soapcpp2.exe

(3)将下载的wsdl文件放在和wsdl2h.exe soapcpp2.exe同一路径下(注意:其中包含文件 onvif.xsd ,types.xsd ,b-2.xsd ,bf-2.xsd,r-2.xsd,t-1.xsd ,ws-addr.xsd ,ws-discovery.xsd 。这些文件和wsdl文件一样从官网上下载)。

<生成框架代码>
➤生成onvif.h文件
        打开windows平台的cmd(win+r) ,通过cmd进入到新建的文件夹下面(wsdl2h.exe soapcpp2.exe),然后执行以下命令:
wsdl2h -o onvif.h -c -s -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl analytics.wsdl analyticsdevice.wsdl media.wsdl deviceio.wsdl display.wsdl event.wsdl imaging.wsdl recording.wsdl replay.wsdl search.wsdl receiver.wsdl ptz.wsdl
 
注意:根据业务需求选择wsdl文件,如果对文件不熟悉,可以全部包含进去,防止出现函数找不到的情况,弊端是导致代码量过大,编译时间过长。
remotediscovery.wsdl :用于发现设备
devicemgmt.wsdl :用于获取设备参数
media.wsdl:用于获取视频流地址
ptz.wsdl:用于设备的PTZ控制
我这里只使用了以上4个文件,所以执行命令如下
wsdl2h -o onvif.h -c -s -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl media.wsdl  ptz.wsdl
 
➣参数解析
-c : 生成c风格代码(注:后缀名还是.cpp ,但实际上是.c)
-c++:生成c++风格代码(注 : 默认是生成c++代码)
-x : 表示不生成xml 文件(注:生成的xml文件,有助于了解发送是SOAP是怎样的结构,建议不使用-x)
-l : 表示指定导入路径
-C : 表示生成客户端代码
-S : 表示生成服务端代码
-s : 不使用STL代码
-o: 生成.h文件叫什么名字
-t : 后面紧跟“typemap.dat”这个批处理文件
 
执行完该命令后,可以在当前目录变成如下,其中增加了onvif.h文件,该文件是接下来生成框架代码的前提:
使用gSOAP工具生成onvif框架代码
➤正式生成框架代码
    在项目开发过程中,往往需要使用“鉴权”这项功能(访问或修改设备参数,需要用户名跟密码,在数据传输过程中,密码是进行了加密处理的),所以在正式生成代码之前在onvif.h文件中加上下面的代码:
#import "wsse.h"
 
    这样在接下生成的框架代码中才有相应的加密函数接口(注意:在Linux环境下,一定要安装openssl库)。
➣准备工作
    (1)将gsoap_2.8.14\gsoap-2.8\gsoap\import拷贝到同gsoapcpp2.exe文件夹下
    (2)将gsoap_2.8.14\gsoap-2.8\gsoap\custom拷贝到同gsoapcpp2.exe文件夹下
通过cmd进入到gsoapcpp2.exe所在文件夹,执行一下命令:
soapcpp2 -2 -c onvif.h -I .\custom -I .\import -I .\import
 
➣参数解析
-c : 生成c风格的代码,因为默认是c++风格的代码
-2:采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
-I : 指定路径
-x : 不产生xml 文件(不建议是用该选项,xml在开发中具有参考意义)
注意:可以是用以下命令查看各个参数的详细作用
gsoapcpp2  -help
 
执行完以上命令后,可以看见当前文件夹下出现了很多.h文件.c文件.nsmap文件.xml文件(因为.xml文件太多,剪切到xml文件夹下面了)
 使用gSOAP工具生成onvif框架代码
➣提取需要的文件
    将soapC.c , soapH.h , soapClient.c , soapClientLib.c , soapServer.c(用于服务端/设备端的开发) , soapServerLib.c(用于服务端/设备段的开发) soapStub.h , onvif.h(该文件基本已经没有用处了)拷贝到一个单独的文件夹"ONVIF"下面。
    将文件gsoap-2.8\gsoap\dom.c拷贝到ONVIF中(该文件好像没什么作用)
    将文件gsoap-2.8\gsoap\custom\duration.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\custom\duration.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\mecevp.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\mecevp.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\smdevp.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\smdevp.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\stdsoap2.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\stdsoap2.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\threads.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\threads.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\wsaapi.c拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\wsaapi.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\wsseapi.h拷贝到ONVIF中
    将文件gsoap-2.8\gsoap\plugin\wsseapi.c拷贝到ONVIF中
    将生成的.nsmap文件中的任意一个(因为生成的.nsmap文件中的内容都是一样的)拷贝到ONVIF中
ONVIF文件中所有文件如下所示:
使用gSOAP工具生成onvif框架代码
利用以上框架代码,新建main.c就可以开始项目开发了。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

使用gSOAP工具生成onvif框架代码的更多相关文章

  1. gsoap工具生成wsdl接口 注意事项

    wsdl是通过wsdl文件作为不同应用的通信接口,所以如何生成wsdl语言很重要,但是很多时候我们发现自己编写的头文件通过gsoap工具soapcpp2.exe从头文件中无法正常生成对应的wsdl语言 ...

  2. 用MyEclipse自带工具生成WebService客户端代码

    本文章主要是介绍如何利用已经发布了的Webservice的wsdl来自动生成java的客户端代码.注意:本方法需要你采用的java版本是1.5或者以上的版本,采用MyEclipse来自动生成代码. w ...

  3. 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等&lpar;v5&period;8&period;8版&rpar;

    TableGo v5.8.8版震撼发布,此次版本更新如下:          1.新增两个扩展字段,用于生成自定义模板时使用.          2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...

  4. android studio 插件开发&lpar;自动生成框架代码插件&rpar;

    android studio 插件开发 起因 去年公司开始上新项目,正好android在架构这方面的讨论也开始多了起来,于是mvp架构模型就进入我们技术选择方案里面,mvp有很多好处,但是有一个非常麻 ...

  5. 利用代码生成工具生成基于ABP框架的代码

    在前面随笔,我介绍了整个ABP优化过框架的分层模型,包括尽量简化整个ABP框架的各个层的关系,以及纳入一些基类的辅助处理,使得我们对应业务分层类或者接口尽可能减少代码,并具有生产环境所需要的基类接口, ...

  6. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等&lpar;v6&period;0&period;0版&rpar;

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  7. &lbrack;Java 开源项目&rsqb;一款无需写任何代码,即可一键生成前后端代码的工具

    作者:HelloGitHub-小鱼干 JeecgBoot 是一款基于代码生成器的低代码开发平台,零代码开发.JeecgBoot 采用开发模式:Online Coding 模式-> 代码生成器模式 ...

  8. JSON生成c&num;类代码小工具

    JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...

  9. mybatis代码生成(generator工具生成代码)

    generator工具生成代码 下载地址     http://pan.baidu.com/s/1bY8C0I

随机推荐

  1. Servlet —— 避免Servlet的并发同步问题

    Servlet的生命周期是由Servlet容器来负责的. Servlet容器通常采用单实例多线程的方式,减少Servlet创建实例的开销,提高效率. 当客户端第一次请求某个Servlet时,Servl ...

  2. spring-websocket的搭建

    Apach Tomcat 8.0.3+MyEclipse+maven+JDK1.7 spring4.0以后加入了对websocket技术的支持,撸主目前的项目用的是SSM(springMVC+spri ...

  3. 网页3D效果库Three&period;js初窥

    网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...

  4. Could not find class &amp&semi;&num;39&semi;&ast;&ast;&ast;&ast;&amp&semi;&num;39&semi;&comma; referenced from method &num;&num;&num;&num;&num;

    找不到类,多半也是和第三方的jar包有关. 将找不到的类.在下图中的地方勾选出来.假设jar太多.有的类有冲突的话,须要明白其先后顺序. 请外一篇和第三方jar有关的异常的文章. Conversion ...

  5. Xamarin开发缺少的android&lowbar;m2repository&lowbar;rxx&period;zip下载地址以及MD5

    android_m2repository_rxx.zip下载地址以及MD5, 注意:下载后需要改文件名,改为 MD5的值.zip  例如:android_m2repository_r29.zip 需改 ...

  6. &lbrack;转&rsqb;Java Web笔记:搭建环境和项目配置(MyEclipse 2014 &plus; Maven &plus; Tomcat)

    来源:http://www.jianshu.com/p/56caa738506a 0. 绪言 Java Web开发中,除了基础知识外,开发环境搭建,也是一项基本功.开发环境包括了IDE.项目管理.项目 ...

  7. DAX创建带有过滤器的超链接

    在这篇文章中,我们将创建一个DAX公式,根据报表中的过滤器生成超链接. 该度量包含2个部分,第一部分是使用DAX生成目标报告的正确URL,第二部分是将过滤器传递给该报告. 浏览器支持的MAX网址长度定 ...

  8. JRE、JDK概述

    JRE(java Runtime Environment java运行环境) 包括java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等, 如果想要运行一个开 ...

  9. Linux IO模型

    1. Linux IO 模型矩阵 2. 同步阻塞IO 3. 同步非阻塞IO 4. 异步阻塞IO 5. 异步非阻塞IO

  10. 转!mysql 命令行下 通过DELIMITER临时改变语句分隔符 执行存储过程

    mysql 在 Navicat 界面工具 执行存储过程ok,但是在命令行下执行失败. 原因在于,默认的MySQL语句分隔符为' ; ',在输入' ; '的时候,“以为”语句已经结束了,但实际上语句还没 ...

相关文章