Как передать информацию заголовка в мыльный заголовок SOAP_ENV__Header, в c ++, используя gsoap - PullRequest
2 голосов
/ 27 сентября 2011

Я работаю над вызовом веб-сервисов с использованием пакетов gsoap в c ++ и получаю ответы. Я должен также передать некоторую информацию заголовка, которую я не уверен, как это сделать, так как мой заголовок такой - / * Заголовок SOAP: * /

struct SOAP_ENV__Header

{

общественность:

void *dummy;    /* transient */

};

Есть что-то, что я пропустил, или это должно быть только так, и мы должны внести изменения здесь? Я прочитал здесь некоторую информацию, но мой заголовок просто пустой.

Во-вторых, для дальнейшей отладки я хотел включить DEBUGS, и для этого, согласно руководству пользователя, я раскомментировал макросы DEBUG в stdsoap2.h и снова собрал флаг DEBUG, но не смог получить создаются файлы .log. Есть идеи?

Дипак

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Для остальных звонков это работает -

#include "json.h"
#include <string.h>
#include "jsonStub.h"

struct Namespace namespaces[] = { {NULL, NULL} };
int main()
{
   struct soap *ctx = soap_new1(SOAP_XML_NOTYPE);
   soap_init(ctx);
   struct value *request = new_value(ctx);
   struct value response;

   ctx->sendfd = 1;   
   ctx->http_extra_header = "userName:abcd\r\npassword:xyz";
   *string_of(value_at(value_at(request, "add"), "i")) = "10";
   *string_of(value_at(value_at(request, "add"), "j")) = "20";

   json_write(ctx, request);
   printf("\n");
   if (json_call(ctx, "endpoint",request, &response))
   {
         printf( "json call failed " );
         soap_print_fault(ctx, stderr);
         printf("\n%d", ctx->error);
         printf("\n1: SOAP faultcode = %s\n", *soap_faultcode(ctx));
         printf("2: SOAP faultstring = %s\n", *soap_faultstring(ctx));
         printf("3: SOAP faultdetail = %s\n\n", *soap_faultdetail(ctx));
         soap_print_fault_location(ctx, stderr);

   }

   else
   {
         printf("Success !!!");
         json_write(ctx, &response);
   }

   soap_destroy(ctx);
   soap_end(ctx);
   soap_free(ctx);
   return 0;

}

0 голосов
/ 16 ноября 2011

Вы можете сделать что-то вроде

soap_init(&mysoap);
mysoap.header = (SOAP_ENV__Header *)soap_malloc(&mysoap, sizeof(SOAP_ENV__Header));
mysoap.header->ns3__MyHeader = (ns3__Header*)malloc(sizeof(ns3__Header));
mysoap.header->ns3__MyHeader->Value = (char*)malloc(10 * sizeof(char));
strcpy(mysoap.header->ns3__MyHeader->Value, str);
...