使用gsoap生成onvif代码框架

使用gSOAP生成代码架构

在使用gSOAP之前首先要了解一下它,那么它是在什么情况下产生的呢?有下面一个特定背景:

在向Web Service发送的SOAP请求中,Body元素中的字段需与WSDL中数据类型的相符合。在构建SOAP的过程中,必须从WSDL文件中获取并映射这一种对应关系。然而这样一个对应过程将是充满了重复性和机械性的,为了避免不必要的人工差错以及节约开发时间,一个名为gSOAP的编译工具应运而生。

gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。通过将WSDL文件解析序列化为C/C++文件,最小化了Web Service的开发过程。

其中有一个WEB SERVICE的开发流程,可以看到gSOAP在整个流程中的地位:


接下来我们来看下gSOAP中两个重要工具的使用:

wsdl2h.exe的作用是根据WSDL生成C/C++风格的头文件

soapcpp2.exe的作用是根据头文件自动生成调用远程 SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton),另外它也能从头文件生成WSDL文件。

(1)、从WSDL中产生头文件

用法:wsdl2h.exe –flag –o 头文件名 WSDL文件名或URI

Flag常用选项:

·         -o 文件名,指定输出头文件

·         -n 名空间前缀 代替默认的ns

·         -c 产生纯C代码,否则是C++代码

·         -s 不要使用STL代码

·         -t 文件名,指定type map文件,默认为typemap.dat

·         -e 禁止为enum成员加上名空间前缀

如果我们要生成onvif cs_discovery的头文件 才用命令 wsdl2h.exe -C -o onvif.h ./typemap.dat http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl

指定要生成onvif.h的头文件 ,typemap.dat文件的位置在当前文件夹 ,后面是remotediscovery.wsdl文件的域名 。 


(2)、从头文件生成存根和框架源文件

    Soapcpp2 –flag 头文件

Flag常用选项:

·         -C 仅生成客户端代码

·         -S 仅生成服务器端代码

·         -L 不要产生soapClientLib.c和soapServerLib.c文件

·         -c 产生纯C代码,否则是C++代码(与头文件有关)

·         -I 指定import路径(见上文)

·         -x 不要产生XML示例文件

·         -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

以上都是gSOAP的使用方法,下面针对具体的wsdl生成存根和框架源文件的步骤:

   

对于在windows下使用gSOAP的时候要注意,使用的是gsoap-2.8\gsoap\bin\win32目录下的两个可执行命令,同时为了简单起见,建议在wsdl目录下建立两个批处理命令gen-h.bat和gen-c.bat,,编辑批处理gen-h.bat,添加如下命令:wsdl2h.exe -s -c -g -t .\WS-typemap.dat -o onvif.h analytics.wsdl analyticsdevice.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl remotediscovery.wsdl replay.wsdl search.wsdl,其中后边的wsdl文件也可以是wsdl文件所在的URI地址。编辑批处理命令gen-c.bat,添加代码:soapcpp2.exe -2 -L -c onvif.h -d..\ -IF:\OpenSource\tools\gSOAP\gsoap-2.8\gsoap\import;F:\OpenSource\tools\gSOAP\gsoap-2.8\gsoap:其中-I指定的是import的路径,需要根据自己的gsoap-2.8存放路径为准。同时要想生成成功PC机需要可以联网。

(2)、从头文件生成存根和框架源文件

    Soapcpp2 –flag 头文件

Flag常用选项:

·         -C 仅生成客户端代码

·         -S 仅生成服务器端代码

·         -L 不要产生soapClientLib.c和soapServerLib.c文件

·         -c 产生纯C代码,否则是C++代码(与头文件有关)

·         -I 指定import路径(见上文)

·         -x 不要产生XML示例文件

·         -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

以上都是gSOAP的使用方法,下面针对具体的wsdl生成存根和框架源文件的步骤:

   

对于在windows下使用gSOAP的时候要注意,使用的是gsoap-2.8\gsoap\bin\win32目录下的两个可执行命令,同时为了简单起见,建议在wsdl目录下建立两个批处理命令gen-h.bat和gen-c.bat,,编辑批处理gen-h.bat,添加如下命令:wsdl2h.exe -s -c -g -t .\WS-typemap.dat -o onvif.h analytics.wsdl analyticsdevice.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl remotediscovery.wsdl replay.wsdl search.wsdl,其中后边的wsdl文件也可以是wsdl文件所在的URI地址。编辑批处理命令gen-c.bat,添加代码:soapcpp2.exe -2 -L -c onvif.h -d..\ -IF:\OpenSource\tools\gSOAP\gsoap-2.8\gsoap\import;F:\OpenSource\tools\gSOAP\gsoap-2.8\gsoap:其中-I指定的是import的路径,需要根据自己的gsoap-2.8存放路径为准。同时要想生成成功PC机需要可以联网。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值