gSOAP C++:创建没有 WSDL 定义的自定义 SOAP:Header
gSOAP C++: Create a custom SOAP:Header without WSDL definition
这是一个目标:使用 N wsdl 构建客户端应用程序,当启动一些 SOAP 请求时 - 添加一些特定的 SOAP:Header(session 令牌和客户端数据照常)
这里我们有一些限制:
- 无法修改服务提供的 Wsdl
- 生成的 gSOAP 代码
也不能修改(IOW 生成的代码包含虚拟
SOAP_ENV_Header )
- 服务提供的 Wsdl 不包含任何
headers 定义(顺便说一下,它看起来很合理
Adding SOAP implicit headers to WSDL
)
所以问题来了:How to add custom generated XML into SOAP:Header field in requests ?
ps。坦率地说,我得到了一个通过 gsoap 插件解决这个问题的解决方案,但我认为它有点 "ugly-hacky" 并且非常感谢更漂亮和优雅的解决方案
好的,这是正确的解决方案:
将#import "header.h" 添加到 typemap.dat:
[
#import "header.h"
]
header.h 中 SOAP_ENV__Header 结构的内容是 user-defined,通常具有指针成员和限定的成员名称:
struct SOAP_ENV__Header
{
type *prefix__name;
};
如果你想要"arbitrary"headers,那么使用DOM:
#import "dom.h"
struct SOAP_ENV__Header
{
xsd__anyType *dom;
};
在自定义 SOAP 中使用 DOM object 时 headers - 不要忘记在 soapcpp2 执行中传递“-d”选项 - 否则会有 compilation/linking问题。
这是一个目标:使用 N wsdl 构建客户端应用程序,当启动一些 SOAP 请求时 - 添加一些特定的 SOAP:Header(session 令牌和客户端数据照常)
这里我们有一些限制:
- 无法修改服务提供的 Wsdl
- 生成的 gSOAP 代码 也不能修改(IOW 生成的代码包含虚拟 SOAP_ENV_Header )
- 服务提供的 Wsdl 不包含任何 headers 定义(顺便说一下,它看起来很合理 Adding SOAP implicit headers to WSDL )
所以问题来了:How to add custom generated XML into SOAP:Header field in requests ?
ps。坦率地说,我得到了一个通过 gsoap 插件解决这个问题的解决方案,但我认为它有点 "ugly-hacky" 并且非常感谢更漂亮和优雅的解决方案
好的,这是正确的解决方案:
将#import "header.h" 添加到 typemap.dat:
[
#import "header.h"
]
header.h 中 SOAP_ENV__Header 结构的内容是 user-defined,通常具有指针成员和限定的成员名称:
struct SOAP_ENV__Header
{
type *prefix__name;
};
如果你想要"arbitrary"headers,那么使用DOM:
#import "dom.h"
struct SOAP_ENV__Header
{
xsd__anyType *dom;
};
在自定义 SOAP 中使用 DOM object 时 headers - 不要忘记在 soapcpp2 执行中传递“-d”选项 - 否则会有 compilation/linking问题。