【问题标题】:gSOAP C++: Create a custom SOAP:Header without WSDL definitiongSOAP C++:创建自定义 SOAP:Header 没有 WSDL 定义
【发布时间】:2024-07-08 12:20:02
【问题描述】:

这是一个目标:使用 N wsdl 构建客户端应用程序,并在启动一些 SOAP 请求时 - 添加一些特定的 SOAP:Header(像往常一样的会话令牌和客户端数据)

这里我们有一些限制:

  • 服务提供的wsdl不能修改
  • 生成的 gSOAP 代码 也不能修改(IOW 生成的代码包含 dummy SOAP_ENV_Header)
  • 服务提供的 Wsdl 不包含任何 标题定义(并且通过它看起来很合理 Adding SOAP implicit headers to WSDL )

那么问题来了:如何将自定义生成的 XML 添加到请求中的 SOAP:Header 字段中?

ps。坦率地说,我得到了一个通过 gsoap 插件解决这个问题的解决方案,但我认为它有点“丑陋”,真的很欣赏更漂亮和优雅的解决方案

【问题讨论】:

    标签: c++ wsdl gsoap


    【解决方案1】:

    好的,这是正确的解决方案:

    将#import "header.h" 添加到typemap.dat:

          [
          #import "header.h"
          ]
    

    header.h 中的 SOAP_ENV__Header 结构的内容是用户定义的,通常具有作为指针的成员和限定的成员名称:

    struct SOAP_ENV__Header
    {
       type *prefix__name;
    };
    

    如果您想要“任意”标题,请使用 DOM:

    #import "dom.h"
    struct SOAP_ENV__Header
    {
       xsd__anyType *dom;
    };
    

    在自定义 SOAP 标头中使用 DOM 对象时 - 不要忘记在 soapcpp2 执行中传递“-d”选项 - 否则会出现编译/链接问题。

    【讨论】: