gSoap разделяет типы данных между интерфейсами

Я пытаюсь реализовать две службы Windows, каждый из которых реализует собственный интерфейс gSoap, и оба являются клиентами и серверами каждого интерфейса.
Поэтому моя проблема заключается в том, что я использую один и тот же тип данных в обоих интерфейсах (класс с членами) и генерирую код c ++ с параметром soapcpp2.exe -q, который создаст два разных пространства имен, это нормально и работает, но проблема заключается в том, что что тип данных, который должен быть одинаковым в обоих интерфейсах, теперь различен из-за разделения пространства имен, но если я удаляю пространства имен, у меня будут конфликты, потому что общий тип данных имеет одинаковое имя в обоих интерфейсах.

«Проблема:

interface 1:
---
>class xsd__Address
{
char *email;
char *url;
};

>int ns1__getAddress(xsd__Address& ret);

---
interface 2:
---
>class xsd__Address
{
char *email;
char *url;
};

>int ns2__setAddress(xsd__Address& ret);

---

после определения каждого заголовка я компилирую его с помощью soapcpp2.exe что-то вроде:

soapcpp2.exe -qintf1 -n xxxx // для интерфейса 1

soapcpp2.exe -qintf2 -n xxxx // для интерфейса 2

поэтому, когда в моем проекте используются оба интерфейса (интерфейс 1 и интерфейс 2), когда мне нужно что-то вроде этого:

intf1::Interface1 int1;
int1.endpoint="xxx";
intf1::ns__Address address;
int1.ns1__getAddress(address);

intf2::Interface1 int2;
int2.endpoint="xxx";
int2.ns2_setAddress(address); //this don't compile like i was expecting because to the compiler they are not the same object (and it is wright...)

Вопросы:

Возможно ли иметь общие типы данных между двумя или более интерфейсами? Да? как это достигается?

Если нет, что является лучшим решением для реализации этого?

12

Решение

В прошлый раз, когда я работал с gSOAP (2008?), Он не предлагал никакой гибкости с общими структурами. Я не могу комментировать, если это возможно сегодня в 2013 году.

Однако в качестве быстрого обходного пути вы можете попробовать объединить 2 WSDL в один (например, как часть сборки), а затем сгенерировать объединенный стек SOAP.

0

Другие решения

У вас уже есть два возможных решения:
1. Использовать пространства имен и как-то иметь дело с формально различными типами данных.
2. Объедините файлы WSDL и запустите компилятор gSOAP только один раз для получения результата.

Я провел несколько недель в 2015 году, пытаясь найти лучшее решение, но не было никакого.

0