文档上关于这个的解决方案有两种
1.使用wsdl2h将多个wsdl生成为一个wsdl.
2.使用-q指定C++命名空间
方法1.没有成功,而且还要解决一大堆的命名空间问题
方法2.必须生成一个额外的没有命名空间的env,不然stdsoap2.cpp 编译不过.而且使用env会出很多问题,比如soap_header会调用env文件中的.而不会调用命名空间中我们自己生成的service的相关方法
试个很久,最后找到个简单的解决方法,对于要手动更改soap header来说,十分方便好用
先使用wsdl2h为不同的wsdl生成相关的文件
wsdl2h-o aHeader.h -nan -NAS a.wsdl
wsdl2h-o bHeader.h -nbn -NBS a.wsdl
注:-n 和 -N是必须的,这样才能替换掉默认的ns_等命名空间前缀
手动将两个文件的内容合在一个文件中,对照着很容易看出不同,把命名空间,类声明等合在一起就行了
最后使用soapcpp2自动生成代码
soapcpp2 -CLx -pAll all.h -I ../../import
这样就解决了
关于soapheader 可以自己在合好的.H文件里更改。soapcpp2生成代码时会自动完成相关工作,不用像网上说的更改soap_out_SAOP_ENV_Header等方法,但注意命名规则
比如
SOAP_ENV_Header
{
char* an__Username;
}
an__是在soap头中指定Username的命名空间
而an可以手工添加在wsdl2h生成的文件中,打开看一下应该就能很好的明白了
注意
在all.h里添加额外的命名空间时,应添加在尾部,不然会出现命名空间不匹配的错误
在生成的xxxProxy.h中 构造函数里 将其他service的命名空间去掉
SOAP_ENV_Header中节点如果是包含关系,需要定义成结构,而且不要继承xsd_anyType
比如
<as:GetName><UserName>test</UserName><Password>123455</Password></a:getName>
定义为
class GetName /*piblic:xsd_anyType*/
{
std::string* UserName;
std::string* Password;
}
SOAP_ENV_Header
{
GetName* as__GetName;
}
分享到:
相关推荐
在本场景中,我们将关注如何使用gSoap来构建一个C++客户端,以便调用由Java的Axis框架编写的Web服务。 1. **gSoap的基本概念** gSoap的主要功能是自动生成客户端和服务器的代码,这些代码能够处理SOAP消息的编码和...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而WSDL(Web Service Description Language)则是一种XML格式,用于定义这些服务的接口。本文将深入探讨如何利用gSOAP工具根据WSDL文件生成C或C++语言的...
在本实例中,我们将讨论如何利用gSOAP来创建一个Web服务客户端。 首先,gSOAP的核心是其代码生成器,它能够从WSDL(Web Services Description Language)文件自动生成所需的客户端和服务端代码。WSDL文件定义了服务...
在文件列表中,虽然只有一个条目"**onvif客户端**",但通常这可能包含了一系列的源文件,如C或C++文件,头文件,配置文件等,它们共同构成了一个完整的ONVIF客户端应用。这些源文件可能包括了如下内容: 1. **soap...
gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在Windows、Linux、MAC OS和UNIX下使用C和C++语言编码。本资源是gSoap2.8.11版,里面还含有一个简单示例。
请注意,这只是gSOAP入门的一个简要概述,实际使用中还需要了解更多的细节,如如何处理类型映射、错误处理、安全设置等。随着进一步的学习和实践,你会更熟练地掌握gSOAP,从而有效地创建和使用Web服务客户端和...
gSOAP库是一个强大的工具,它允许开发者在C或C++中轻松地实现SOAP(简单对象访问协议)通信。本篇文章将详细讲解如何在Windows下使用gsoap来构建一个能够查询MySQL数据库的Web服务客户端。 1. **gSOAP简介** gSOAP...
本文将详细解析如何在Linux系统中利用gSOAP工具包创建Web Service服务端与客户端程序,包括环境搭建、代码编写、编译与测试等关键步骤。 ### 一、gSOAP介绍 gSOAP是一个开源的C/C++库,用于实现Web Service的开发...
在VS2008中使用gsoap调用Web Service
Java客户端调用C++ GSoap生成的Web服务是一种跨语言的互操作性实践,它涉及到Java和C++两种编程语言的交互,以及GSoap库在其中的作用。GSoap是开源的C/C++库,用于构建SOAP(简单对象访问协议)服务和客户端,允许...
GSOAP(Generic SOAP)是一个开源库,用于在C和C++中实现SOAP(Simple Object Access Protocol)协议。SOAP是一种基于XML的数据交换协议,常用于Web服务。本篇将重点介绍如何在Visual Studio 2010环境下搭建一个基本...
gSOAP是一个基于C/C++的WebService开发库,支持SOAP和XML协议。下面是开发WebService客户端的详细步骤和知识点: 一、准备工作 在开发WebService客户端之前,需要下载gSOAP库,包括源代码和工具,例如wsdl2h和...
本工程实现了内部集成了四个工程,实现了gsoap与WCF互为客户端和服务端进行通信,即实现了gsoap做客户端与gsoap或WCF作服务端的通信、WCF作客户端与gsoap或WCF作服务端的通信,工程接口简洁,易于移植,欢迎下载交流...
在本场景中,我们讨论的是如何使用JNI来调用由gSOAP编译生成的C/C++库,这个库通常是一个动态链接库(.so文件),用于实现网络通信功能。gSOAP是一个开源工具,用于构建SOAP Web服务客户端和服务端,它支持多种编程...
在"压缩包子文件的文件名称列表"中,`gsoap-win32-2.7`可能是一个包含gSOAP库文件、头文件、示例代码和文档的Windows 32位版本的发行包。安装后,开发者可以利用其中的库和工具进行Web Service的开发。 使用gSOAP...
在本文中,我们将深入探讨如何使用gSOAP库在C++环境中实现一个客户端。 首先,理解gSOAP的工作原理至关重要。gSOAP生成的代码包括了SOAP消息的序列化和反序列化,以及HTTP传输层的处理。开发流程通常包括以下几个...
GSOAP(Generic SOAP)是一个开源库,用于在C和C++中实现SOAP(Simple Object Access Protocol)协议。SOAP是一种基于XML的数据交换协议,常用于Web服务,使得应用程序可以通过网络进行通信。本篇将深入探讨如何在...
【gSOAP创建服务端、客户端进行Centerface人脸检测】是一个基于gSOAP库的教程,用于构建Web服务以实现人脸检测功能。gSOAP是一个开源的C和C++软件开发工具包,用于构建跨平台的网络服务,它允许开发人员在SOAP(简单...
7. 在客户端代码中,实例化gSOAP的`soap`对象,然后调用服务方法,传递必要的参数。 8. 调用`soap_call_ns__YourWebServiceMethod(&soap, service_url, NULL, input_params, &output_params)`这样的函数,进行服务...