C++调用webservice服务生成客户端代码-gsoap

 本文在原创上面稍作修改

  1. Java端创建服务

C++调用webservice服务生成客户端代码-gsoap_第1张图片

  1. 输入网址,生成wsdl文件
  2. 使用wsdl2.exe生成头文件

注意:

如果说传输的内容中含有中文,则需要增加一个bat文件,把传输类型由std::string转为wchar_t*,由宽字符传输,则可以解决乱码问题.刚开始由于没有添加处理文件导致后续接收到的中文乱码,折腾了半天,希望大家少走弯路.

bat文件(用txt文本保存如下文件,再修改后缀为bat即可)中一句话:

xsd__string = | std::wstring | wchar_t*

  • 根据wsdl文件生成头文件

先将目录切换到指定目录,为后续生成C++相关文件做准备

然后输入命令

C++调用webservice服务生成客户端代码-gsoap_第2张图片

 

命令执行后,会生成头文件

  • 根据wsdl的网址生成头文件
  • C++调用webservice服务生成客户端代码-gsoap_第3张图片

 

  • 中文乱码添加bat
  • C++调用webservice服务生成客户端代码-gsoap_第4张图片

 

 

  1. 根据soapcpp2.exe生成系列文件

soapcpp2常用选项

-C 仅生成客户端代码

-S 仅生成服务器端代码

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

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

-I 指定import路径

-x 不要产生XML示例文件

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

原始目录:

C++调用webservice服务生成客户端代码-gsoap_第5张图片

执行命令(注意大小写):

C++调用webservice服务生成客户端代码-gsoap_第6张图片

 

生成相关文件

C++调用webservice服务生成客户端代码-gsoap_第7张图片

 

  1. 程序执行

创建项目

C++调用webservice服务生成客户端代码-gsoap_第8张图片

C++调用webservice服务生成客户端代码-gsoap_第9张图片

 

 

添加文件,红色的文件复制到你创建项目目录下

C++调用webservice服务生成客户端代码-gsoap_第10张图片

C++调用webservice服务生成客户端代码-gsoap_第11张图片

C++调用webservice服务生成客户端代码-gsoap_第12张图片

 

 

 

你的项目添加效果如下:

C++调用webservice服务生成客户端代码-gsoap_第13张图片

代码如下:

#include "stdafx.h"
#include "soapH.h"
#include "PLMWebserviceImpServiceSoapBinding.nsmap"
using namespace std;
wchar_t * char2wchar(const char* cchar);
char * wchar2char(const wchar_t* wchar );
int _tmain(int argc, _TCHAR* argv[])
{
	// SOAP的客户端
	soap m_oSoap;
	class ns1__sayHello sayhello;
	class ns1__sayHelloResponse sayhelloReponse;
	soap_init(&m_oSoap);
	string a = "asds";
	wchar_t *wstrName = char2wchar(a.c_str());
	sayhello.arg0 = wstrName;
	//int result = soap_call___ns1__sayHello(&m_oSoap,NULL,NULL,&sayhello,sayhelloReponse);
	int result = soap_call___ns1__sayHello(&m_oSoap,"http://localhost:8080/CXFTest/services/PLMService",NULL,&sayhello,sayhelloReponse);
	if(SOAP_OK == result)
	{
		// 输出返回结果
		wchar_t* strResult = sayhelloReponse.return_;
		//wcout.imbue(locale("chs"));
		char *result_s = wchar2char(strResult);
		cout<<"wcout:"<

调用效果:

C++调用webservice服务生成客户端代码-gsoap_第14张图片

C++调用webservice服务生成客户端代码-gsoap_第15张图片

你可能感兴趣的:(C++,java)