gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,在数据接入其他平台,如C#、JAVA实现的一些webservice服务,在需要将数据对接其他设备的应用中,gSOAP可以为开发提供很大方便。
一般的,一个webservice服务端,会提供一个wsdl文件、一个接入的url地址和一份对应的字段定义文档,有了这些资料,就可以使用gSOAP进行webservice对接。
关于gSOAP的安装、部署、这里不做介绍,网上有很多相应的指导方法。
在进行对接之前,首先要明确服务端使用的是soap1.1还是soap1.2,通常soap1.2可以兼容soap1.1,反之不行。
gSOAP工具包中,有2个文件wsdl2h和soapcpp2,这两个工具文件用来根据wsdl文件反编译出一套代码,代码中含有服务的接口、以及接口对应的各个字段,可以根据需求生成c或c++的代码,在自己的代码中,将需要传输到服务端的字段拼装后,即可调用接口进行数据的传输。
反编译代码步骤:
1.使用wsdl2h工具,根据wsdl文件生成一个c/c++语法结构的头文件
Wsdl2h–s –o 头文件名 wsdl文件名
这一步将会得到一个头文件,如:head.h该步的目的:实现WSDL文件到.h文件的数据映射。
2.使用gSoap的预编译器soapcpp2。
根据上一步得到的头文件来生成存根文件(soapStub.h)和客户端代码框架。
/usr/local/gSOAP/bin/soapcpp2-i -x -C -L head.h
这一步将会得到几个.nsmap、.h和.cpp文件,如:calc.nsmap、soapC.cpp、soapH.h、soapStub.h、soapcalcProxy.cpp、soapcalcProxy.h
该步的目的:生成相应的底层通信代码。
注1 :wsdl2h的用法(WSDL/schema 解析和代码生成器)wsdl2h [opt] 头文件名 WSDL文件名或URL
wsdl2h常用选项
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则。
如果不用s就会生成带STL的头文件,这样,在后边的编译中需要加入STL的头
stlvector.h,位于:gsoap/import/目录下。
注2 :soapcpp2的用法(编译和代码生成器)
soapcpp2 [opt] <