文档上关于这个的解决方案有两种
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的命名空间