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

gSOAP C++: Create a custom SOAP:Header without WSDL definition

本文关键字:定义 WSDL 自定义 Header SOAP 一个 创建 C++ gSOAP      更新时间:2023-10-16

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

这里我们有一些限制:

  • 无法修改服务提供的Wsdl
  • 生成的gSOAP代码也不能修改(IOW生成的代码包含伪代码SOAP_ENV_Header)
  • 服务提供的Wsdl不包含任何headers定义(顺便说一下,它看起来很合理向WSDL添加SOAP隐式标头)

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

ps。坦率地说,我通过gsoap插件找到了一个解决方案来解决这个问题,但我认为这有点"丑陋的黑客",我真的很欣赏更漂亮、更优雅的解决方案

好的,这里有合适的解决方案:

将#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对象时,不要忘记在soapcp2执行中传递"-d"选项,否则会出现编译/链接问题。