Существуют ли какие-либо легкие альтернативы gSOAP?
Я пробовал использовать gSOAP для доступа к веб-сервису (например, используя поставляемый WSDL для генерации заглушек C, а затем используя их в приложении). Однако я обнаружил, что сгенерированный .c и объектные файлы довольно большие (несколько мегабайт), что является проблемой во встроенной среде, где я работаю.
Вы знаете какие-нибудь более простые библиотеки SOAP, или мне нужно вернуться к генераторам и синтаксическим анализаторам общего XML, таким как ezXML?
4 ответа:
Я недавно тоже рассматривал этот вопрос, и лучшим вариантом, который я нашел, был gSOAP, он очень зрелый и хорошо протестирован. Тем не менее, я решил пойти не-SOAP маршрутом, который был вариантом, так как я нахожусь как на стороне клиента, так и на стороне сервера. Перед использованием gSOAP убедитесь, что вы можете жить с их лицензией, вы можете быть обязаны выпустить свой код или заплатить им, в зависимости от того, как вы его используете.
Другой вариант-Apache Axis2/C, хотя у меня нет опыта работы с ним (я бы предположил, что он имеет аналогичный размер следа для gSOAP). Их клиентский API - это здесь. Учебник по клиентскому API находится здесь .
Если вы решили пойти по разбираемому XML-маршруту, вас может заинтересовать Этот SO вопрос (см. ответы).
Вы также можете проверить boost:: spirit для разбираемого маршрута. Он имеет возможность создавать небольшие, быстрые, специализированные (и общие) Парсеры, если вам удобно с C++ (они могут быть написаны, чтобы быть реентерабельными, поэтому вызов их через статический объект с внешним интерфейсом " C " является кошерным). Я могу поручиться за это в общем смысле (не специфическом для XML). Крутая кривая обучения, но большой выигрыш.
Это веб-сервис, который вы создаете? Если это так, рассмотрите возможность использованияREST вместо мыла. REST намного проще, и вы можете использовать существующие, проверенные, работающие сейчас обработчики HTTP вместо того, чтобы проходить через огромный слой трансляции HTTP - XML - SOAP.
Если вы используете чужую веб-службу, изучите схему SOAP и / или примеры ответов. Я не могу поверить, что я защищаю это, но если схема не является расширяемой или рекурсивной, вам может быть лучше использовать простой Lalr парсер или даже сопоставление строк в необработанных HTTP-ответах вместо того, чтобы пытаться анализировать SOAP или XML вообще. Это гораздо проще реализовать в embedded C.
Обычно мы возвращаемся к непосредственному созданию XML (в основном путем конкатенации строк), где не может быть использована хорошая библиотека SOAP.
Другим решением может быть переключение на JSON, который (обычно) имеет меньшие накладные расходы и размеры запросов/ответов, поэтому он может быть лучше во встроенных программах. Если у вас есть только веб-сервис SOAP, вы можете использовать прокси-скрипт на сервере, который преобразует запросы JSON в запросы SOAP и ответы SOAP в ответы JSON.
Вы смотрели на Apache CXF. Он имеет несколько функций кода gen
* Java to WSDL * WSDL to Java * XSD to WSDL * WSDL to XML * WSDL to SOAP * WSDL to service
Более полезным руководством для построения потребителя являетсяздесь .