gsoap生成webservice调用客户端接口
来源:互联网 发布:淘宝网上买仓鼠 编辑:程序博客网 时间:2024/05/20 04:09
http://blog.csdn.net/johnnywww/article/details/8187398
1.下载gsoap2.8
2.运行
- wsdl2h.exe -o XXX.h XXX.wsdl
3.生成客户端代码
- soapcpp2.exe -L -x -C XXX.h -I .\gsoap-2.8\gsoap\import
4.如果有多个服务,那么就将要使用命名空间
- wsdl2h -nns别名 -N服务命名空间 -o XXX.h XXX.wsdl
- wsdl2h -nuseraddns -NUserAddWS -oUserAddWebService.h userAddWebService.wsdl
- wsdl2h -nuserloginns -NUserLoginWS -oUserLoginWebService.h userLoginWebService.wsdl
- soap2cpp -LCx -pCMSWS All.h -I ../../import
拷贝gsoap2.8目录下的stdsoap2.h,stdsoap2.cpp到程序目录,并修改stdsoap2.cpp文件,将其中一个.nsmap文件包含进去
- #include "xxx.nsmap"
5.传输中文
调用方法转为utf-8传输soap_set_mode( soap*, SOAP_C_UTFSTRING )
如果用qt的QString将转换
- std::string CUIUtils::convertQStrToUTF8Str(const QString& value) {
- QByteArray arr = value.toUtf8();
- return std::string(arr.data());
- }
- QString CUIUtils::convertUTF8StrToQStr(const std::string& value) {
- return QString::fromUtf8(value.c_str());
- }
例子
- int CUserDetailInfoWebServiceImpl::getUserInfo(const char* address, CUserDetailInfo* userDetailInfo)
- {
- UserDetailInfoWebServiceCXFImplServiceSoapBinding webServiceBinding;
- if ((NULL != address) && strlen(address) > 0)
- {
- webServiceBinding.endpoint = address;
- }
- soap_set_mode(webServiceBinding.soap, SOAP_C_UTFSTRING);
- userDetailInfo->setRetCode(RET_CODE_ERROR_UNKNOWN);
- UserDetailInfoWS__getUserInfoByUserId request;
- std::string id = userDetailInfo->getUserId();
- request.userId = &id;
- UserDetailInfoWS__getUserInfoByUserIdResponse response;
- int ret = webServiceBinding.__UserDetailInfoWS__getUserInfoByUserId(&request, &response);
- if (SOAP_OK == ret)
- {
- if (NULL == response.result)
- {
- userDetailInfo->setRetCode(RET_CODE_NULL_OBJECT);
- userDetailInfo->setErrorDesc("no return value");
- return userDetailInfo->getRetCode();
- }
- userDetailInfo->setRetCode(response.result->retCode);
- if (RET_CODE_SUCCESS != userDetailInfo->getRetCode())
- {
- userDetailInfo->setErrorDesc(*response.result->desc);
- }
- else
- {
- if (NULL == response.result->userOperateInfo)
- {
- userDetailInfo->setRetCode(RET_CODE_NULL_OBJECT);
- userDetailInfo->setErrorDesc("no return info");
- return userDetailInfo->getRetCode();
- }
- userDetailInfo->setDescript(*response.result->userOperateInfo->descript);
- userDetailInfo->setDepartmentId(*response.result->userOperateInfo->departmentId);
- userDetailInfo->setEnabled(response.result->userOperateInfo->enable);
- userDetailInfo->setLoginName(*response.result->userOperateInfo->loginName);
- userDetailInfo->setPassword(*response.result->userOperateInfo->password);
- userDetailInfo->setUserName(*response.result->userOperateInfo->name);
- }
- }
- else
- {
- userDetailInfo->setRetCode(RET_CODE_SOAP_ERROR);
- userDetailInfo->setDescript(*soap_faultstring(webServiceBinding.soap));
- }
- return userDetailInfo->getRetCode();
- }
6.导入多个wsdl文件
- wsdl2h.exe -sck -t e:\test\typemap.dat -o onvif.h analytics.wsdl analyticsdevice.wsdl deviceio.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl Receiver.wsdl Recording.wsdl remotediscovery.wsdl Replay.wsdl Search.wsdl
7.操作参数:
以下就是wsdl2h的选项:
-o 文件名,指定输出头文件-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写
xsd__string = | std::wstring | wchar_t*
那么SOAP/XML中的string将转换成std::wstring或wchar_t*,这样能更好地支持中文。
接着就是讲.h文件生成.cpp文件
soapcpp2.exe接的选项如下
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定imp<wbr>ort路径(见上文) </wbr>
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
这里一般需要带上-x,不然会生成一大堆的xml文件。
-i选项也要带上,不然不会生成soapXXXXBindingService.cpp和soapXXXXBindingService.h文件
-I 选项一般也要带上,-I 后接gsoap路径中import目录
一般是-I E:\workspace\onvif\gsoap-2.8\gsoap\import;E:\workspace\onvif\gsoap-2.8\gsoap这样的
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口 .
- gsoap生成webservice调用客户端接口
- webservice 生成客户端接口调用
- java客户端调用C++ GSoap生成的webservice
- java客户端调用C++ GSoap生成的webservice
- gsoap客户端调用几个webservice服务
- C++客户端通过gSOAP调用WebService
- C++客户端通过gSOAP调用WebService
- 生成webservice接口以及通过客户端调用接口。
- qt使用gsoap调用webservice接口
- C++使用gsoap调用webservice接口
- webservice接口客户端调用
- C++通过gsoap做WebService接口 供C++及java客户端调用
- C++客户端 如何通过gsoap调用WebService接口(以及返回结果乱码解决办法)
- 黑马程序员_毕向东_Java基础_DAY03_函数_学习笔记
- 程序内存分配方式
- impala 刷新同步hive表命令
- 判断连个单链表是否交叉,并找到交叉点
- MIDL莫名其妙的问题
- gsoap生成webservice调用客户端接口
- vs2010中臃肿的ipch和sdf文件
- js动态更换cascades中listview的layout
- git 命令: 删除远程 branch / tag
- 基于IE的简单JS操作文件
- 为android-support-v4.jar打包源码
- Android Studio 0.2.0 发布
- 数据分析不使用Hadoop的五大理由
- xmind 思维导图