Как передать не XML-данные в заголовке в gsoap C ++ от клиента? - PullRequest
0 голосов
/ 12 сентября 2018

Я использую библиотеку gsoap c ++ для вызова веб-службы Java.

Я могу передать файл json, вызвав json_call, но я хочу добавить информацию заголовка.Для этого я изменил struct SOAP_ENV__Header следующим образом:

struct ns3__Header   {       
  char *username;          
  char* password;   };   
struct SOAP_ENV__Header    {
  #ifdef WITH_NOEMPTYSTRUCT
  char dummy;    
  #endif
  struct ns3__Header *ns3__MyHeader;
};

Теперь я могу добавлять значения в заголовок, но моя проблема в том, что они добавляются в заголовок в формате xml.Но я хочу просто тег: значение формата.Как этого добиться?

Когда я передаю заголовок, он выглядит так:

<?xml version="1.0" encoding="UTF-8"?>   <username id="_300">        <ns3:MyHeader> 
        in soap_out_SOAP_ENV__Header
    </ns3:MyHeader>   </username>   {     "add":      {       "i": 10,      "j": 20,  
 }   }

Но он должен выглядеть так:

username:xyz
password:abcd
...
...
{
  "add": 
  {
    "i": 10,
    "j": 20,

  }
} 

Ответы [ 2 ]

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

Наконец я нашел решение передать информацию заголовка в вызове покоя в g ++ g ++ c ++ -

#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 голосов
/ 21 сентября 2018

Soap_Env_header отправляет по умолчанию xml, его невозможно вставить в json, попробуйте другую библиотеку, надеюсь, cpprest (Касабланка)

...