Есть ли легкие альтернативы gSOAP?

Я попытался использовать gSOAP для доступа к веб-службе (например, используя предоставленный WSDL для создания C-заглушек, а затем их использования в приложении). Однако я обнаружил, что сгенерированные .c и объектные файлы довольно большие (несколько мегабайт), что является проблемой во встроенной среде, где я работаю.

Знаете ли вы о каких-либо более простых SOAP-библиотеках или мне приходится возвращаться к генераторным генераторам XML и синтаксическим анализаторам, таким как ezXML?

Ответ 1

Недавно я изучил этот вопрос, и лучшим вариантом, который я нашел, был gSOAP, он очень зрелый и хорошо протестирован. Тем не менее, я решил пойти не-SOAP-маршрут, который был вариантом, так как я на стороне клиента и сервера. Прежде чем использовать gSOAP, убедитесь, что вы можете жить с их лицензией, вы можете освободить свой код или оплатить его, в зависимости от того, как вы его используете.

Другим вариантом является Apache Axis2/C, хотя у меня нет опыта с ним (я бы предположил, что он имеет аналогичный размер для gSOAP). Их клиентский API здесь. Учебное пособие по API-интерфейсу клиента здесь.

Если вы решите пройти анализируемый XML-маршрут, вам может быть интересен этот вопрос SO (см. ответы).

Вы можете также проверить boost:: spirit для проанализированного маршрута. Он имеет возможность создавать небольшие, быстрые, специализированные (и общие) парсеры, если вам нравится С++ (их можно записать как реентерабельные, поэтому вызов их через статический объект с внешним интерфейсом "C" является кошерным). Я могу ручаться за него в общем смысле (не относящийся к XML). Крутая кривая обучения, но большая отдача.

Ответ 2

Это веб-сервис, который вы создаете? Если да, рассмотрите возможность использования REST вместо SOAP. REST намного проще, и вы можете использовать существующие, проверенные, работающие теперь обработчики HTTP вместо того, чтобы проходить через огромный уровень перевода HTTP-XML-SOAP.

Если вы используете кому-то еще веб-сервис, изучите схему SOAP и/или примеры ответов. Я не могу поверить, что я защищаю это, но если схема не является расширяемой или рекурсивной, вам может быть лучше использовать простой парсер LALR или даже сопоставление строк в необработанных ответах HTTP вместо того, чтобы пытаться самостоятельно анализировать SOAP или XML. Это намного проще реализовать во встроенном C.

Ответ 3

Обычно мы возвращаемся к созданию XML напрямую (в основном путем конкатенации строк), где не может быть использована хорошая библиотека SOAP.

Другое решение может заключаться в том, что вы переключаетесь на JSON, который (как правило) имеет меньшие накладные расходы и размеры запросов/ответов, поэтому он может быть лучше во встроенных программах. Если у вас есть только доступный SOAP WebService, вы можете использовать прокси-сервер Script на сервере, который переводит запросы JSON на запросы SOAP и ответы SOAP на ответы JSON.

Ответ 4

Вы посмотрели Apache CXF. Он имеет несколько функций генерации кода.

* Java to WSDL
* WSDL to Java
* XSD to WSDL
* WSDL to XML
* WSDL to SOAP
* WSDL to service

Более полезным руководством по созданию потребителя является здесь.