Chinaunix首页 | 论坛 | 博客
  • 博客访问: 440376
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: 其他平台

2013-07-05 18:04:29


使用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成员加上名空间前缀

(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机需要可以联网。

 

阅读(4490) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~