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++之间的转换规则,比如在wsmap.dat里写。

在本例中,使用的是:wsdl2h -s -o gsoap_client.h http://192.168.198.129:9909/test/services?wsdl

参数s就表示生成不带STL的C/C++语法结构的头文件calc.h。

如果不用s就会生成带STL的头文件,这样,在后边的编译中需要加入STL的头stlvector.h,位于:gsoap/import/目录下。


 


2、soapcpp2的用法(编译和代码生成器)

soapcpp2 [opt] 头文件名

soapcpp2常用选项

-C 仅生成客户端代码 

-S 仅生成服务器端代码 

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

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

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

-x 不要产生XML示例文件 

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

本例中,使用的是:soapcpp2 -i -x -C -L gsoap_client.h 


3、gSoap工具wsdl2和soapcpp所生成文件的简单分析

(1) wsdl2生成的具有C/C++语法结构的头文件,其作用就是:将XML语法结构的WSDL文件映射为C/C++语法结构的.h文件;并为下一步做准备。

(2) soapcpp(采用参数:-i -x -C -L)生成的文件共有6个文件:PlayerBeanPortBinding.nsmap、soapC.cpp、soapH.h、soapPlayerBeanPortBindingProxy.cpp、soapPlayerBeanPortBindingProxy.h、soapStub.h。

a. PlayerBeanPortBinding.nsmap文件

该文件的作用:An XML-to-C/C++ namespace mapping table,即WSDL文件与生成的客户端代码框架的一个名字空间的映射表。

b. soapStub.h

该文件就是直接由wsdl2生成的头文件转化而来,它详细定义了WSDL所描述的各项服务和数据结构。

它是soap的存根文件,定义了由wsdl2生成的头文件里对应的远程调用模型(RPC)。

c. soapPlayerBeanPortBindingProxy.和soapPlayerBeanPortBindingProxy.cpp

这两个文件是客户端代码的一个简单封装,它封装了底层通信,并向外提供一个很简单的界面,该界面展示了用户能够使用的所有服务(由WSDL所描述)。

d. soapH.h和soapC.cpp

这个两个文件是soap的序列和反序列化代码。


 


4、设置字符编码

   在利用gSoap编写Web Service客户端和服务器端的程序时,需要设置其编码方式。接口为:soap_set_mode,其实它是就是一个宏:

#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))

如果要设置为UTF8

可以这样调用:soap_set_mode(&soap, SOAP_C_UTFSTRING);

详细信息可参考该宏所在文件:stdsoap2.h