2016-08-04 33 views
0

Hier ist ein Ziel: bauen Client-Anwendung N Wsdl der Verwendung und wenn einige SOAP-Anfragen gestartet - fügen Sie einige spezifische SOAP: Header (Session-Token und Clientdaten wie üblich)gSOAP C++: eine benutzerdefinierte SOAP anlegen: Kopf ohne WSDL-Definition

Hier haben wir ein paar Einschränkungen:

  • der Wsdl von erbrachten Leistungen nicht
  • generiert gSOAP Code auch modifiziert werden, können nicht geändert werden (IOW erzeugte Code enthalten Dummy SOAP_ENV_Header)
  • von Dienstleistungen Wsdl die KEINE Header Definition enthalten (und die durch es vernünftig aussieht Adding SOAP implicit headers to WSDL )

hier Die Frage ist also: Wie benutzerdefinierte generierte XML in SOAP hinzuzufügen: Feld-Header in Anfragen?

ps. Ehrlich gesagt habe ich eine Lösung dieser Frage über gsoap Plugins Lösung aber ich denke, es ist ein bisschen „hässlich-Hacky“ und wirklich zu schätzen, mehr schöne und elegante Lösung

Antwort

0

Ok, hier ist die richtige Lösung, es zu tun:

hinzufügen # Import "header.h" typemap.dat:

 [ 
     #import "header.h" 
     ] 

der Inhalt der SOAP_ENV__Header struct in header.h ist benutzerdefiniert, typischerweise mit Mitgliedern, die Zeiger und Mitgliedsnamen sind qualifiziert:

struct SOAP_ENV__Header 
{ 
    type *prefix__name; 
}; 

Wenn Sie „willkürlich“ Header wollen, dann DOM verwenden:

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

wenn in benutzerdefinierten SOAP-Header mit DOM-Objekt - nicht vergessen „-d“ Option in soapcpp2 Ausführung passieren - sonst wird es Kompilierungs-/Verbindungsprobleme.