gSOAP工具包为c/c++服务器和客户端WEB服务应用程序提供了一个跨平台的软件开发工具包,简化了在任何类型的应用程序中使用XML。该工具包支持SOAPRPC 1.1、1.2编码和文档、文字的样式,WSDL 1.1 ,MTOM\MIME\DIME附件(流), SOAP –over – UDP请求 – 响应和单向消息。该工具包还支持 WS – Addressing 和 WS – Security,其他几个可用的 WS -*或正在开发。参考网站:http://gsoap2.sourceforge.netfor project status and latest news.
gSOAP“soapcpp2” 编译器和代码生成器 “stdsoap2”运行引擎自从版本2.1.3发行以来都是稳定的。
gSOAP“wsdl2h” WSDL/模式解析器和代码生成器自从wsdl2h的1.1.0版本以来都是稳定的。”wsdl2h” 工具完全支持WSDL 1.1 ,XML工具,WS – Policy ,和其他的WS-*协议。
gSOAP “wsdl2h” 工具是一个 gSOAP 应用程序本身,它演示了通用XML处理工具箱的能力,可以用来解析WSDL, XML模式和 SOAP/X,L。
gSOAP工具支持流媒体技术来加快SOAP/XML 和MTOM/MIME 附件转移潜在无限的数据长度。
gSOAP工具是唯一的工具包,支持本地的序列化C和c++直接在XML数据类型。你可以用它来导出和导入应用程序数据在XML中,而不必编写包装器例程。
gSOAP工具包确保小内存占用。XML是一种作为处理瞬态格式而不是缓冲。许多优化应用减少资源需求,加快XML解析。
gSOAP工具包提供了独立的HTTP(S)的web服务器功能作为Apache国防部和IIS钩子(位于gsoap / mod_gsoap)。CGI和FastCGI都受支持。一个web服务器的例子展示了独立的功能包含在包中。
XML数据和C/C++绑定的工具。
XML schema < = > C / c++类型绑定意味着XML和C / c++数据类型安全。
WSDL 1.1/2.0,XSD 1.1/2.0,SOAP 1.0/1.1兼容。
其他HTTP(S)1.0/1.1操作(GET、PUT、POST等)对XML、JSON、等等。
通过套接字发送和接收XML、文件FD和c++流。
。
。
。
(特色)略过。
这个分布包包含独立于平台的源代码。预先构建的 “soapcpp2”和“wsdl2h的二进制文件包括下列平台:
*Win32 i386 compatible
*MAC OS X
二进制文件位于gsoap /bin。
重要的是这些 “wsdl2h”二进制文件使用的是默认的配置而不需要SSL支持。(没有HTTPS站点访问)
先按照 INSTALL.txt里面的安装说明。
gSOAP “wsdl2h” 工具将wsdl转换成一个gSOAP 头文件来处理 gSOAP 代码代码生成器 “soapcpp2” 生成XML序列化,存根和骨架代码来构建WEB服务应用程序。使用“wsdl2h '后面通过“ soapcpp2”整组WSDL和XML模式的转化为代表C或C ++的数据结构和相关的XML解析器。您也可以直接在现有的C / C ++数据结构使用gSOAP的“ soapcpp2”工具声明来创建XML序列化例程这些类型简化XML数据的存储。
翻译的WSDL示例代码的两个步骤:
$ wsdl2h -s -ocalc.h http://www.cs.fsu.edu/~engelen/calc.wsdl
$soapcpp2 -CL -I/path/to/gsoap/import calc.h
“calc.h” 头文件中包含服务和XML模式类型在C/C++,和其他的从WSDL中复制的有用的信息一起关联到服务中。在上面运行 Doxygen 生成一套漂亮的页面。
不要直接包括wsdl2h生成“ calc.h '头文件到您的代码(声明生成的代码复制)。头文件由gSOAP的存根编译' soapcpp2 '为你生成一下的文件:
soapClient.cpp 用于服务调用的客户端存根例程
soapServer.cpp 服务器端框架为服务器发展例程
soapC.cpp C/C++参数编组代码
cals.nsmap 一个XML –to- C/C++ 的命名空间映射表
编译一个客户端,你要做的就是编译和链接 “soapC.cpp” “soapClient.cpp” “stdsoap2.cpp” 和你的代码。在你的代码里访问服务:
#include"soapH.h"
#include"calc.nsmap"
main()
{struct soap *soap = soap_new(); // alloc 'soap' engine context
double result;
if (soap_call_ns2__add(soap, NULL, NULL, 1.0,2.0, result) == SOAP_OK)
std::cout << "The sum of 1.0 and2.0 is " << result << std::endl;
else
soap_stream_fault(soap, std::cerr);
soap_destroy(soap); // dealloc serializationdata
soap_end(soap); // dealloc temp data
soap_free(soap); // dealloc 'soap' engine context
}
首先,导入所有soapcpp产生的定义和命名空间映射表。然后soap_call_ns2__add ()调用服务。这个功能是从soapcpp2的calc.h文件生成。该头文件包含呼叫功能的指令。
开发一个c++客户机应用程序基于c++代理对象而不是c函数,使用“soapcpp2”选项- j:
$ wsdl2h -s -ocalc.h http://www.cs.fsu.edu/~engelen/calc.wsdl
$soapcpp2 -j -CL -I/path/to/gsoap/import calc.h
这会产生“soapcalcProxy.h '和'soapcalcProxy.cpp ”与服务方法的calcProxy类,你可以用它来调用服务。例如:
#include"soapcalcProxy.h"
#include"calc.nsmap"
main()
{calcProxy service;
double result;
if (service.add(1.0, 2.0, result) == SOAP_OK)
std::cout << "The sum of 1.0 and2.0 is " << result << std::endl;
else
service.soap_stream_fault(std::cerr);
service.destroy(); // dealloc serializationand temp data
}
编译上述程序和 “soapC.cpp”“soapcalsProxy.cpp” “stdsoap2.cpp”链接。
QNX
On QNX the bison.simple file is located in$QNX_HOST/usr/share/bison.simple
Update your .profile to include:
exportBISON_SIMPLE=$QNX_HOST/usr/share/bison/bison.simple
exportBISON_HAIRY=$QNX_HOST/usr/share/bison/bison.hairy
WIN32
Bison 1.6 can crash on Win32 systems ifYYINITDEPTH is too small Compile with
/DYYINITDEPTH=5000