gsoap生成webservice调用客户端接口
1.下载gsoap2.82.运行
- wsdl2h.exe -o XXX.h XXX.wsdl
wsdl文件可以是本地文件,也可以是服务器的wsdl,比如http://192.168.0.122:3333/ws/uss?wsdl3.生成客户端代码
- 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
手动将生成的.h合并为一个新文件,比如上面两个User*.h,合并为新文件all.h,对照着很容易看出不同,把命名空间,类声明等合在一起就行了
- 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调用客户端接口相关推荐
- wsdl2java 工具下载_利用wsdl2java工具生成webservice的客户端代码
1.JDK环境 2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME, ...
- wsdl2java生成客户端代码_利用wsdl2java工具生成webservice的客户端代码
1.JDK环境 2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME, ...
- 利用ApacheCXF自动生成webservice的客户端代码
利用ApacheCXF自动生成webservice的客户端代码 一.环境准备 1.JDK环境 2.下载apache-cxf发布包,举例版本为3.2.14,解压发布包,设置CXF_HOME,并添加%CX ...
- java扫描接口_一种扫描接口并生成可调用API接口文档的方法与流程
本发明属于JavaWeb开发技术领域,涉及一种API接口文档的生成方法,尤其是一种扫描接口并生成可调用API接口文档的方法. 背景技术: API(Application Programming Int ...
- 短信发送:webservice调用第三方接口发送短信
1 原博客地址:http://blog.csdn.net/sxdtzhaoxinguo/article/details/34437591 2 demo地址:http://download.csdn.n ...
- WebService调用天气接口及手机号查询归属地接口
Webservice手机号查询接口的调用 1 在这里我讲述,如何使用wsdl2命令生成客户端代码. 因为使用jdk自带的也可以,就是很烦.因为会生成.class字节码文件与.java文件在一个文件夹下 ...
- 使用axis1.4生成webservice的客户端代码
最近发现了一个很好用的工具,可以根据WSDL文件来生成webservice客户端代码,省去了我们自己手动开发webservice客户端的麻烦,简单好用,用法如下: 1.下载axis1.4,解压: 2. ...
- 一个简单的WebService调用天气预报接口的demo
很长一段时间没更新博客了,最近刚跳槽成功,工作也慢慢稳定下来了,后面也会陆陆续续更新. 现在的公司用到了WebService,以前没用过,所以学习一下记录下来. 什么是WebService? 首先附上 ...
- Webservice调用天气接口案例
废话不多说,希望能够帮助到大家. 天气接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl pom.xml配置: co ...
最新文章
- nexus 4 linux,Nexus 4刷机Ubuntu Touch教程
- 计算机 大学活动 游戏,朝花夕拾”——中国矿业大学计算机学院积极举办“那些年我们一起玩过的游戏”活动...
- MyEclipse修改jsp模板文件
- div滚动到指定位置 vue_【Vue 进阶】从 slot 到无渲染组件
- python 柱形图_python绘制双柱形图代码实例
- 腾讯开源软件镜像站上线
- redis-数据类型一览
- mpvue两小时,产出一个《点钞辅助工具》小程序
- 恶意广告活动利用 WebKit 0day 实施欺诈
- linux常用ipc技术,LINUX系统编程之IPC
- windows跳转端口
- 全网首发:GB18030制定者站出来,$为什么要显示为¥,给大家解释一下
- Atitit. Exception in thread main java.lang.Error: Unresolved compilation problem:
- ubuntu phpmyadmin 404 not found
- 微信机器人框架【Python】
- vue element 实现树形菜单栏n层级分类,NavMenu menu
- 项目管理软件-禅道-内网部署
- select标签如何设置默认选中的选项
- Wind对接pytho总结
- 公众号与服务器验证失败,微信公众号服务器配置token验证失败原因
热门文章
- 微信与服务器通讯失败,linux服务器微擎提示couldn’t resolve host api.weixin.qq.com解决办法...
- ftl if else判断_07.合意就执行,不行就拉倒-if/else条件控制(一)
- android点击事件的优先级,android中进程的优先级
- 高级开发必须理解的Java中SPI机制
- 通过源码分析MyBatis的缓存
- 让开发自动化持续重构 --使用静态分析工具识别代码味道
- java常见异常说明汇总
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Java面试参考指南——同步
- Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理