У меня трудное время, пытаясь установить заголовок SOAP с помощью gsoap. Я прочитал FAQ здесь: http://www.genivia.com/Help/FAQlist.html#g17Настройка заголовка мыла с SOAP_ENV__Header в C
Этот ответ не был какой-либо помощи: How to pass header information to the soap header SOAP_ENV__Header, in c++ using gsoap
Это предполагает некоторые магическая кастовая имеет место кастовой фиктивный элемент в SOAP_ENV__Header к нужному типу данных.
Вот мой код:
#include <stdio.h>
#include <time.h>
struct SOAP_ENV__Header {
char *authwsns__token;
char *authwsns__ip;
};
#define SOAP_TYPE_SOAP_ENV__Header struct SOAP_ENV__Header
#include "authservicesH.h"
#include "AuthServicesBinding.nsmap"
int
main(int argc, char **argv) {
struct soap *soap;
struct authwsns__GetTokenRequest *request;
struct authwsns__GetTokenResult *result;
soap = soap_new();
soap->header = (struct SOAP_ENV__Header *)soap_malloc(soap, sizeof(struct SOAP_ENV__Header));
soap->header->authwsns__token = "jc09bdd";
soap->header->authwsns__ip = "10.10.10.10";
request = (struct authwsns__GetTokenRequest *)malloc(sizeof(struct authwsns__GetTokenRequest));
result = (struct authwsns__GetTokenResult *)malloc(sizeof(struct authwsns__GetTokenResult));
request->tokenBase = id;
soap_call___authwsns__getToken(soap, "http://", NULL, request, result);
if (result->tdsns__errorReport) {
printf("Web services error\n");
printf("Level: %s\n",result->tdsns__errorReport->level);
printf("Message: %s\n",result->tdsns__errorReport->message);
} else {
printf("Token is %s\n",result->token);
}
soap_end(soap);
soap_free(soap);
free(request);
free(result);
}
Когда я запускаю свою программу через отладчик и отображать SOAP_ENV__Header, он по-прежнему показывает, как имеющие фиктивный элемент, так что я не уверен, что правильный способ переопределить определение по умолчанию. Объяснение в FAQ часто расплывчато о деталях этого.
Когда я взломал файл Stub.h своим определением SOAP_ENV__Header и установил в нем значения, появляются правильные поля, когда я запускаю его через отладчик, но они не отображаются в выходном XML.
Что мне здесь не хватает? Спасибо, John