2016-08-04 1 views
0

Вот целевое: создать клиентское приложение с использованием N wsdl и при запуске некоторых запросов SOAP - добавить определенный SOAP: заголовок (токены сеанса и данные клиента как обычно)gSOAP C++: создать пользовательский SOAP: заголовок без определения WSDL

Здесь мы получили несколько ограничений:

  • WSDL поданному услуги не могут быть изменены
  • Сформирован gSOAP код также не может быть изменен (IOW сгенерированный код содержит фиктивную SOAP_ENV_Header)
  • WSDL поданных услуг не содержат какое-либо определения заголовков (и, им кажется разумным Adding SOAP implicit headers to WSDL )

Так вот вопрос: Как добавить пользовательский сгенерированный XML в SOAP: поле заголовка в запросах?

пс. Откровенно говоря, я получил одно решение разрешающего этот вопрос через gsoap плагин, но я думаю, что его немного «уродливые Hacky» и действительно ценю более красивыми и элегантное решение

ответ

0

Ok, вот правильное решение, чтобы сделать это:

Добавить #import «header.h» в typemap.dat:

 [ 
     #import "header.h" 
     ] 

содержание SOAP_ENV__Header структуры в header.h определяется пользователем, как правило, с членами, которые являются указатели и имена членов квалифицированы:

struct SOAP_ENV__Header 
{ 
    type *prefix__name; 
}; 

Если вы хотите «произвольные» заголовки, а затем использовать DOM:

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

при использовании объекта DOM в пользовательских заголовков SOAP - не забудьте передать «-d» вариант в soapcpp2 исполнения - в противном случае будет проблемы компиляции/связывания.