1.下载gsoap2.82.运行
[plain] view plaincopy
  1. wsdl2h.exe -o XXX.h XXX.wsdl
wsdl文件可以是本地文件,也可以是服务器的wsdl,比如http://192.168.0.122:3333/ws/uss?wsdl3.生成客户端代码
[plain] view plaincopy
  1. soapcpp2.exe  -L -x -C XXX.h -I .\gsoap-2.8\gsoap\import
4.如果有多个服务,那么就将要使用命名空间
[plain] view plaincopy
  1. wsdl2h -nns别名 -N服务命名空间 -o XXX.h XXX.wsdl
  2. wsdl2h -nuseraddns -NUserAddWS -oUserAddWebService.h userAddWebService.wsdl
  3. wsdl2h -nuserloginns -NUserLoginWS -oUserLoginWebService.h userLoginWebService.wsdl
手动将生成的.h合并为一个新文件,比如上面两个User*.h,合并为新文件all.h,对照着很容易看出不同,把命名空间,类声明等合在一起就行了
[plain] view plaincopy
  1. soap2cpp -LCx -pCMSWS All.h -I ../../import
拷贝gsoap2.8目录下的stdsoap2.h,stdsoap2.cpp到程序目录,并修改stdsoap2.cpp文件,将其中一个.nsmap文件包含进去
[plain] view plaincopy
  1. #include "xxx.nsmap"

5.传输中文调用方法转为utf-8传输soap_set_mode( soap*, SOAP_C_UTFSTRING )如果用qt的QString将转换
[cpp] view plaincopy
  1. std::string CUIUtils::convertQStrToUTF8Str(const QString& value) {
  2. QByteArray arr =  value.toUtf8();
  3. return std::string(arr.data());
  4. }
  5. QString CUIUtils::convertUTF8StrToQStr(const std::string& value) {
  6. return QString::fromUtf8(value.c_str());
  7. }
例子
[cpp] view plaincopy
  1. int CUserDetailInfoWebServiceImpl::getUserInfo(const char* address, CUserDetailInfo* userDetailInfo)
  2. {
  3. UserDetailInfoWebServiceCXFImplServiceSoapBinding webServiceBinding;
  4. if ((NULL != address) && strlen(address) > 0)
  5. {
  6. webServiceBinding.endpoint = address;
  7. }
  8. soap_set_mode(webServiceBinding.soap, SOAP_C_UTFSTRING);
  9. userDetailInfo->setRetCode(RET_CODE_ERROR_UNKNOWN);
  10. UserDetailInfoWS__getUserInfoByUserId request;
  11. std::string id = userDetailInfo->getUserId();
  12. request.userId = &id;
  13. UserDetailInfoWS__getUserInfoByUserIdResponse response;
  14. int ret = webServiceBinding.__UserDetailInfoWS__getUserInfoByUserId(&request, &response);
  15. if (SOAP_OK == ret)
  16. {
  17. if (NULL == response.result)
  18. {
  19. userDetailInfo->setRetCode(RET_CODE_NULL_OBJECT);
  20. userDetailInfo->setErrorDesc("no return value");
  21. return userDetailInfo->getRetCode();
  22. }
  23. userDetailInfo->setRetCode(response.result->retCode);
  24. if (RET_CODE_SUCCESS != userDetailInfo->getRetCode())
  25. {
  26. userDetailInfo->setErrorDesc(*response.result->desc);
  27. }
  28. else
  29. {
  30. if (NULL == response.result->userOperateInfo)
  31. {
  32. userDetailInfo->setRetCode(RET_CODE_NULL_OBJECT);
  33. userDetailInfo->setErrorDesc("no return info");
  34. return userDetailInfo->getRetCode();
  35. }
  36. userDetailInfo->setDescript(*response.result->userOperateInfo->descript);
  37. userDetailInfo->setDepartmentId(*response.result->userOperateInfo->departmentId);
  38. userDetailInfo->setEnabled(response.result->userOperateInfo->enable);
  39. userDetailInfo->setLoginName(*response.result->userOperateInfo->loginName);
  40. userDetailInfo->setPassword(*response.result->userOperateInfo->password);
  41. userDetailInfo->setUserName(*response.result->userOperateInfo->name);
  42. }
  43. }
  44. else
  45. {
  46. userDetailInfo->setRetCode(RET_CODE_SOAP_ERROR);
  47. userDetailInfo->setDescript(*soap_faultstring(webServiceBinding.soap));
  48. }
  49. return userDetailInfo->getRetCode();
  50. }
6.导入多个wsdl文件
[plain] view plaincopy
  1. 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调用客户端接口相关推荐

  1. wsdl2java 工具下载_利用wsdl2java工具生成webservice的客户端代码

    1.JDK环境 2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME, ...

  2. wsdl2java生成客户端代码_利用wsdl2java工具生成webservice的客户端代码

    1.JDK环境 2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME, ...

  3. 利用ApacheCXF自动生成webservice的客户端代码

    利用ApacheCXF自动生成webservice的客户端代码 一.环境准备 1.JDK环境 2.下载apache-cxf发布包,举例版本为3.2.14,解压发布包,设置CXF_HOME,并添加%CX ...

  4. java扫描接口_一种扫描接口并生成可调用API接口文档的方法与流程

    本发明属于JavaWeb开发技术领域,涉及一种API接口文档的生成方法,尤其是一种扫描接口并生成可调用API接口文档的方法. 背景技术: API(Application Programming Int ...

  5. 短信发送:webservice调用第三方接口发送短信

    1 原博客地址:http://blog.csdn.net/sxdtzhaoxinguo/article/details/34437591 2 demo地址:http://download.csdn.n ...

  6. WebService调用天气接口及手机号查询归属地接口

    Webservice手机号查询接口的调用 1 在这里我讲述,如何使用wsdl2命令生成客户端代码. 因为使用jdk自带的也可以,就是很烦.因为会生成.class字节码文件与.java文件在一个文件夹下 ...

  7. 使用axis1.4生成webservice的客户端代码

    最近发现了一个很好用的工具,可以根据WSDL文件来生成webservice客户端代码,省去了我们自己手动开发webservice客户端的麻烦,简单好用,用法如下: 1.下载axis1.4,解压: 2. ...

  8. 一个简单的WebService调用天气预报接口的demo

    很长一段时间没更新博客了,最近刚跳槽成功,工作也慢慢稳定下来了,后面也会陆陆续续更新. 现在的公司用到了WebService,以前没用过,所以学习一下记录下来. 什么是WebService? 首先附上 ...

  9. Webservice调用天气接口案例

    废话不多说,希望能够帮助到大家. 天气接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl pom.xml配置: co ...

最新文章

  1. nexus 4 linux,Nexus 4刷机Ubuntu Touch教程
  2. 计算机 大学活动 游戏,朝花夕拾”——中国矿业大学计算机学院积极举办“那些年我们一起玩过的游戏”活动...
  3. MyEclipse修改jsp模板文件
  4. div滚动到指定位置 vue_【Vue 进阶】从 slot 到无渲染组件
  5. python 柱形图_python绘制双柱形图代码实例
  6. 腾讯开源软件镜像站上线
  7. redis-数据类型一览
  8. mpvue两小时,产出一个《点钞辅助工具》小程序
  9. 恶意广告活动利用 WebKit 0day 实施欺诈
  10. linux常用ipc技术,LINUX系统编程之IPC
  11. windows跳转端口
  12. 全网首发:GB18030制定者站出来,$为什么要显示为¥,给大家解释一下
  13. Atitit.  Exception in thread main java.lang.Error: Unresolved compilation problem:
  14. ubuntu phpmyadmin 404 not found
  15. 微信机器人框架【Python】
  16. vue element 实现树形菜单栏n层级分类,NavMenu menu
  17. 项目管理软件-禅道-内网部署
  18. select标签如何设置默认选中的选项
  19. Wind对接pytho总结
  20. 公众号与服务器验证失败,微信公众号服务器配置token验证失败原因

热门文章

  1. 微信与服务器通讯失败,linux服务器微擎提示couldn’t resolve host api.weixin.qq.com解决办法...
  2. ftl if else判断_07.合意就执行,不行就拉倒-if/else条件控制(一)
  3. android点击事件的优先级,android中进程的优先级
  4. 高级开发必须理解的Java中SPI机制
  5. 通过源码分析MyBatis的缓存
  6. 让开发自动化持续重构 --使用静态分析工具识别代码味道
  7. java常见异常说明汇总
  8. Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
  9. Java面试参考指南——同步
  10. Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理