Подключите приложение C++ к веб-приложению JAVA с SOAP

У меня есть приложение C++, которое должно соединиться с веб-приложением JAVA, есть ли какие-либо хорошие, пакеты SOAP с открытым исходным кодом для этого, или было бы легче просто прокрутить мое собственное?

11
задан AbsoluteSpace 1 August 2019 в 06:19
поделиться

6 ответов

Я буду голосовать darkhelmet, так как gSoap также был бы моей рекомендацией. Мы - главным образом магазин Java, но с некоторыми битами C++ и gSoap была наша предпочтительная интеграция SOAP путь. Это - действительно больше работы, чем Ваши типичные стопки Java, но это кажется твердым.

11
ответ дан 3 December 2019 в 08:58
поделиться

Быстрый Google поднял это для инструментария. В то время как я никогда не использовал его, это, кажется, довольно популярно и твердо. Не точно пакет и не действительно прокрутка Вашего собственного, но вид в середине.

1
ответ дан 3 December 2019 в 08:58
поделиться

Мы пошли с gSOAP, а не Осью, чтобы не иметь зависимость и от JRE и от Оси только для того, чтобы разработать проект C++. Это работало хорошо, который хорош, так как код gSOAP ужасен и делает это очень пугающим для исправления любых ошибок в нем.

Предупреждение о соединении gSOAP, хотя: Вы никогда не можете использовать больше чем один WSDL в единственном объекте ссылки (исполняемый файл, dll, общий объект). Это вызвано тем, что некоторые сгенерированные определенные для WSDL функции имеют общие названия (например, soap_getfault ()).

Хуже, с Unix соединение ELF, эти имена вызовут перекрестное соединение между общими объектами, таким образом, отказ FooService мог бы быть обработан soap_getfault () для BarService, повредив память, если структуры детали отказа отличаются.

Обходное решение для этого должно удостовериться, что ничто gSOAP-связанное не выставляется вне, ТАКИМ ОБРАЗОМ, они связаны в. Это может быть решено путем предоставления gcc этих определений _both при соединении самой gSOAP библиотеки и соединении кода:

#define SOAP_FMAC2  __attribute__ ((visibility ("hidden")))
#define SOAP_FMAC4  __attribute__ ((visibility ("hidden")))
#define SOAP_FMAC6  __attribute__ ((visibility ("hidden")))
#define SOAP_NMAC   __attribute__ ((visibility ("hidden")))

Я решил его, поместив их в заголовочный файл и вынудив gcc включать это перед чем-либо еще с -include fixsoaplink.h.

Лучший путь, если можно приложить усилия, мог бы, чтобы изменить видимость ELF по умолчанию на скрытый, и только экспортировать символы, которые Вы хотите к (как dllimport/dllexport в VC).

1
ответ дан 3 December 2019 в 08:58
поделиться

Вот другая проблема с gSOAP, мы просто обнаружили твердый путь: это использует выбор () для всего опроса, поэтому после того как у Вас есть 1 024 открытые дескрипторов файлов (64 в Windows?) это повредит стек. Это приводит к любой побочные ошибки, где это не может отправить сообщения, завершить катастрофические отказы приложения.

Обходное решение, если Вы не готовы исправить сам gSOAP, должно написать Ваш собственный сетевой код и сцепить его в с мылом-> fconnect,-> fsend,-> frecv и т.д.

0
ответ дан 3 December 2019 в 08:58
поделиться

Смотрите на проект Оси Apache. Это хорошо поддерживается на C++ (и Java) и если Вам повезет, что запустились с хорошего WSDL для целевого сервиса, то Вы будете без домов.

0
ответ дан 3 December 2019 в 08:58
поделиться

Когда я видел сгенерированный код от gSOAP, у меня о был сердечный приступ.

То, что пользователь обязан делать все управление памятью для каждого объекта просто, поразило. Так, я сел и сделал что-то, вероятно, глупое в долгосрочной перспективе, но довольно удовлетворяющий в ближайшей перспективе...

Я записал программу, которая переносит код gSOAP с моими собственными классами CPP, которые делают интерфейсный взгляд больше как, я хотел бы, чтобы это посмотрело.

Я использовал Ограниченную по объему гвардию в рамках каждого сервисного метода для содержания на память, и так как я имею дело со всеми видами различных типов, я использовал a std::list<boost::any> сделать это. У меня есть функции, которые делают каждый тип объекта, в котором я нуждаюсь, и они помещают фактическую память в мой list<any>. Это имело несколько проблем - главным образом просто изменения конфигурации. Я генерирую тысячи классов теперь, говоря с десятками веб-сервисов.

Я не уверен, что рекомендовал бы свой тот же путь кому-либо еще... Я должен, вероятно, стиснуть зубы и начать пытаться способствовать gSOAP, вместо того, чтобы поддержать мой собственный инструмент, который зависит от вывода gSOAP...

0
ответ дан 3 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: