gSOAP C ++:创建一个没有WSDL定义的自定义SOAP:Header

时间:2016-08-04 12:08:33

标签: c++ wsdl gsoap

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

这里有一些限制:

  • Wsdl由服务提供无法修改
  • 生成的gSOAP代码 也无法修改(IOW生成的代码包含虚拟 SOAP_ENV_Header)
  • Wsdl由服务提供不包含任何内容 标题定义(由它看起来合理 Adding SOAP implicit headers to WSDL

所以这就是问题:如何将自定义生成的XML添加到SOAP:请求中的标题字段?

PS。坦率地说,我有一个解决方案通过gsoap插件解决这个问题,但我认为它有点“丑陋 - hacky”,真的很欣赏更美丽和优雅的解决方案

1 个答案:

答案 0 :(得分:0)

好的,这是适当的解决方案:

将#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”选项 - 否则会出现编译/链接问题。