文档上关于这个的解决方案有两种
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可以手工添加

本文档介绍了如何在gsoap客户端中调用多个service,提供了两种方法:1) 合并wsdl生成一个wsdl,但存在命名空间问题;2) 使用-q指定C++命名空间,但需要生成额外的env文件。最终,作者推荐了一种简单方法,通过手动合并wsdl2h生成的文件,并在all.h中调整命名空间,避免了复杂的问题,使得soapcpp2能正确处理soap_header。
3516

被折叠的 条评论
为什么被折叠?



