Название: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Январь 29, 2011, 17:06 В данном топике попробую собрать актуальную информацию по вопросам связки C++/Qt и веб-сервисов.
Т.е. все что актуально на резюме:
QtSOAP (лицензия: LGPL (?)) *QtSOAP. Значит первое что хочу отметить, что это решение перемещено троллями в "архив решений (http://qt.nokia.com/products/qt-addons/solutions-archive/index)" (качать вроде как с http://qt.gitorious.org/qt-solutions ). не знаю почему, но у меня возникает впечатление что развиваться оно не будет. Впрочем оно и по возможностям весьма специфично-ограниченно - не умеет генерировать код и не умеет сама анализировать WSDL (был бы интерфейс как у php-soap - с вызовом функций сервиса по именам и возможностью просмотреть структуры данных - меня бы устроило и без генерации кода).В итоге - чтобы начать пользоваться веб-сервисом, вам надо вручную сначала изучить wsdl-файл. Ну и "SOAP 1.1 только". * доки (http://doc.qt.nokia.com/solutions/4/qtsoap/index.html) * Описание того как это пользовать. раз (http://oss.fruct.org/wiki/Maemo-Business:_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_QtSoap), два (http://forum.vingrad.ru/forum/topic-260298.html). * описание "как ставить": http://stackoverflow.com/questions/1290198/qt-soap-install :: не игрался. разбирать WSDL-файл руками мне пока квалификация не дозволяет... впрочем не хочу и не буду 8-) ... Axis2/C (лицензия: Apache 2.0) * Axis2/C ( ссылка (http://axis.apache.org/axis2/c/core/) ). Апачевские компоненты. Много всего вкусного, генерация кода, wsdl и бла-бла-бла. Но почему-то генерация "только С" (не С++) (по крайней мере у мена не получилось). С-шный код какой-то мутный... и все равно требует (по крайней мере для генерации кода) оргигинальный Axais2 работающий на Java (ну и её тоже соответсвенно). Есть трудности/проблемы под выньдой. Axais2/С "под винду" ориентирван тем боком, что ориентирован на сборку со "студией" от небезизвестного граблепроизводителя. ну и бинарники тоже собранны в оной. В итоге, если вы кодите на MinGW - то у вас появляются проблемы с подключением этих библиотек к своему проекту. Как вариант решения - я вижу генерацию .def и .a файлов так-же как это делается с библиотекой MySQL под виндоус (тоже собранной под студией) ( "reimp -d libmysql.lib" и "dlltool -k -d libmysql.def -l libmysql.a" ) (см в ассистант раздел "How to Build the QMYSQL Plugin on Windows" (http://doc.trolltech.com/4.7/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows)). не проверял, но полагаю тут аналогичный путь решения. ::У меня не вышло связать это с Qt-проектом. В своё время я не решил проблему подключения библиотек собранных в студии к проекту собираемому с mingw, а потом уж не надо было.... WSF Staff (лицензия: Apache 2.0 (без каких либо GPL - подлицензии в отдельном разделе).) * WSF Staff ( ссылка (http://code.google.com/p/staff/) ) WSF Staff - это обертка для Axis2/C, т.е. для функционирования требуются библиотеки Axis2/C. Для функционирования Сервера необходим весь Axis2/C, для клиентской части, собственно, небольшое количество небольших библиотек (не более 4-5) Вкусно! не совсем Qt, но C++ и STL. Судя по по описаниям - _удобная_ _человечья_ обертка над Апачевским Axis2/C. Может генерить WSDL из .h-файла и наоборот. Генерит обертки как для клиента так и для сервиса. Код С++. Сомтрите сами: * Creating a C++ service under Linux (http://code.google.com/p/staff/wiki/ExampleCalculatorServiceLinux) * Создание СОА клиентов на основе WSDL описания. (http://code.google.com/p/staff/wiki/ExampleCreatingCppClientFromWsdl) * SoaApplicationStruct (http://code.google.com/p/staff/wiki/SoaApplicationStruct) Проект живой (последние обновления февраль 2011 года) Часть доков по русски. Выглядит вкусно, как и доки в wiki от нокии (см ниже). Связка с Qt и MinGW: см пост от разработчиков ниже по топику(быстро решили, молодцы!) (http://www.prog.org.ru/index.php?topic=16542.msg112368#msg112368) - т.е. оно вполне себе собирается с Qt и MinGW и использует STL-ные классы: * ман на офф.сайте: Создание клиента StockQuote использующего Qt (http://code.google.com/p/staff/wiki/ExampleStockQuoteQtCreator) ::лично я пока не использовал. но с разработчиками есть контакт, проект, имхо, интересен, и думаю как разгребусь немного - поиграюсь. gSoap (лицензия: разные части под разными лицензиями или мультилицензированием - GPL|LGPL|Коммерческая) В Wiki от Нокии появилась заметка про то как использовать gSoap и Qt. : * GSoap: SOAP and XML Web services for Qt apps (http://wiki.forum.nokia.com/index.php/GSoap:_SOAP_and_XML_Web_services_for_Qt_apps). * Есть статья про "Using gsoap for web services (http://wiki.forum.nokia.com/index.php/Using_gsoap_for_web_services)". Да, "не шибко родное" (в смысле "не интегрированное в Qt"), да, но зато типа "почти официальная инфа" от нокии, да ещё и с примерами кода). * может генерить WSDL из .h-файла и наоборот. * при указании генерить С++-ный код, использует STL-ные типы : std::string, std::vector... Первая из указанных статей, кстати вроде как появилась "буквально неделю назад" - 19 января (очень похоже, что это ещё один признак того, что QtSoap будут постепенно "закапывать", особенно если рецепты будут работать под Win/Lin)... кто знает, может наличие механизмов для связки с Qt в стандартном проекте, нацеленном на веб-сервисы, лучше чем наличие "родной", но самостоятельной компоненты)... * По теме всплывает ещё Nokia WSDL-to-C++ Wizard for S60 (http://www.forum.nokia.com/info/sw.nokia.com/id/5ddeb939-c4e4-4e64-8f25-282e1e86afed/Nokia_WSDL_to_Cpp_Wizard_for_S60.html) который хочет "XML Data Binding Library (http://www.forum.nokia.com/info/sw.nokia.com/id/ef769f7d-4e3c-4515-89a8-5bdb54b704ce/xmldatabinding.html)" для исполнения данного кода... а последняя кажется токмо для s60 и существует... Связка с Qt и MinGW: :: не без заковырк и напильника, но собрался простой веб-сервис-клиент c помощью Qt и gSoap под Windows. Файлы см в посте ниже (http://www.prog.org.ru/index.php?topic=16542.msg110104#msg110104) :: есть трудность с использованием русских имен в полях данных и именах функций в WSDL. Подозреваю, что в итоге подключить его например к веб-сервисам на базе 1С без переименования имен функций и полей веб-сервиса на английский может быть затруднительно. (пост (http://www.prog.org.ru/index.php?topic=16542.msg110156#msg110156)). С 1С начал играться, но пока не закончил. Но в целом впечатление от gSoap у меня хорошие. KdSoap (лицензия: GPL|собственная коммерческая) * KdSoap. http://www.kdab.com/products/kd-soap Связка с Qt и MinGW: Заявлена родная поддержка Qt. Но цены совсем не для частного разработчика. около 490-700 € за одну лицензию. Однако тут (http://developer.qt.nokia.com/forums/viewthread/1057): утверждается что "KDSoap is available under the GPL license from ftp://ftp.kdab.com/pub/kdsoap (http://ftp://ftp.kdab.com/pub/kdsoap) (for opensource applications and for evaluation purposes), and under a commercial license from http://www.kdab.com/products/license-prices" ::Увы, я пока не пробовал это. Нашел это 2 дня назад только. Кто будет играться - доложитесь о результатах? FEAST (лицензия: собственная проприетарная коммерческая) Вебсервисы для Qt. Подробнее - только статья на сайте и рекламные листовки. http://www.clausmark.com/index.php/feast/articles/webservices-with-qt.html что может быть ещё полезно: * SOAP Версия 1.2 Часть 0: Учебник для начинающих (http://www.w3.org/2002/07/soap-translation/russian/part0.html) _____________________ За сим пока все. Надеюсь вы будете пополнять топик ссылками и примерами использования Qt и ВебСервисов. Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Январь 31, 2011, 16:21 Работающий пример веб-сервис-клиента на Qt созданного с gSoap
Проверено правда только на виндоус. компилятор - MinGW По мотивам статьи от Нокии указанной выше ( GSoap: SOAP and XML Web services for Qt apps. (http://wiki.forum.nokia.com/index.php/GSoap:_SOAP_and_XML_Web_services_for_Qt_apps) ) - следал все как сказано в статье но на нстольном компе под виндоус. Результат - в приложении к посту. Да, перед сборкой и анализом примера - надо бы прочитать статью. Иначе будет не понятно откуда там половина файлов взялась. Перед сборкой надо качать GSoap -> http://sourceforge.net/projects/gsoap2/files/gSOAP/ я качал gsoap_2.8.1.zip. его я распаковал в С:/ws/ -> так что бы скажем LICENSE.txt был тут: C:\ws\gsoap-2.8\LICENSE.txt После этого - уже собранные утилиты автогенерации кода и разбора WSDL лежат в C:\ws\gsoap-2.8\gsoap\bin\win32 Важно: этот путь ( C:\ws\gsoap-2.8 ) указан в файле проекта! если будете разворачивать gsoap в другое место - отредактируйте .pro файл! Все. Скачиваете демо проект и собираете. Автогененируемые gsoap файлы лежат в подкаталоге проекта в папке gsoap. Что там, откуда взялось, что такое именно StockQuote.wsdl - написано собственно в самой статье от Нокии, упомянутой выше. =========================================== UPD 2011.04.07: куда-то исчез пример gsoap_qt_probe.2011.01.31.zip.... не знаю - говорит "404 - вложение не найдено". Куда дели?! По просьбам публики - выкладываю обновленнй пример. gsoap_qt_probe.2011.01.31.zip. Лицензия на примеры - LGPL. В примерах вы найдете : qt-сервер(gSoap), qt-клиент(gSoap), php-клиент(phpSoap). В qt-сервер добавлена обработка get запросов (и обратившись на :8080-порт в браузере можно лицезреть сраничку и скачать wsdl который лежит рядом). Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Январь 31, 2011, 16:29 теперь немного о грустном.
с "WSF Staff" играться, похоже, можно только под "студией" граблепроизводителя. MinGW отказывается компилять код инклюдов с переменными типа TChar . Как избавиться от этого без большого напильника пока не представляю... Жаль... пока разбираться не хочу, тем более gSoap "начал взлетать". Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Февраль 01, 2011, 11:20 gSoap: обнаружена проблема с русскими наименованиями функций и полей.
Генератор кода gSoap создает структуры, переменные классов и имена функций в соответствии с их наименованиями в WSDL-файле, но в силу ограничений C++ на имена функций и структур не могут именоваться по русски, и в итоге генерируются имена типов вида Код: ns1___x00d0_x0094_x00d0_x00be_x00d0_x00ba_x00d1_x0083_x00d0_x00bc_x00d0_x00b5_x00d0_x00bd_x00d1_x0082 Функций вызова функций вебсервиса по имени (например callF(functionNam, args) ) я пока не нашел... Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Barmaglodd от Февраль 01, 2011, 15:18 Может руками, а? У вас так много различных сервисов или вы хотите добавлять их динамически в рантайме? Я для Erlang'а тоже долго искал что-нибудь для SOAP, но потом оказалось проще руками.
Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Февраль 01, 2011, 16:31 Может руками, а? У вас так много различных сервисов или вы хотите добавлять их динамически в рантайме? Я для Erlang'а тоже долго искал что-нибудь для SOAP, но потом оказалось проще руками. В смысле "руками"? можете пояснить? руками дергать сервис? или формировать SOAP-пакеты? работать по варианту "как с QtSoap" я не хочу. Я хочу загрузить WSDL и получить простое внятное описание сигнатур функций и струкур данных (пусть и не в рантайме). Просто для того, что бы иметь возможность быстро создать/адаптировать клиента. Или сделать аналог "мастера импорта веб-сервиса". Т.е. я сейчас фактически ищу "малогеморройный" механизм работы с веб-сервисами при "почти"-промышленной разработке. Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Barmaglodd от Февраль 02, 2011, 09:50 В смысле "руками"? можете пояснить? руками дергать сервис? или формировать SOAP-пакеты? Именно руками дергать сервис и формировать SOAP-пакеты. Но если вам надо "мастера импорта веб-сервиса", то не вариант. Я к тому, что иногда проще и быстрее тупое решение "в лоб", чем поиск и изучение универсального мега-фреймворка. :) Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: twp от Февраль 02, 2011, 10:47 Может руками, а? У вас так много различных сервисов или вы хотите добавлять их динамически в рантайме? Я для Erlang'а тоже долго искал что-нибудь для SOAP, но потом оказалось проще руками. В смысле "руками"? можете пояснить? руками дергать сервис? или формировать SOAP-пакеты? работать по варианту "как с QtSoap" я не хочу. Я хочу загрузить WSDL и получить простое внятное описание сигнатур функций и струкур данных (пусть и не в рантайме). Просто для того, что бы иметь возможность быстро создать/адаптировать клиента. Или сделать аналог "мастера импорта веб-сервиса". Т.е. я сейчас фактически ищу "малогеморройный" механизм работы с веб-сервисами при "почти"-промышленной разработке. Насколько я знаю там есть генератор исходников с WSDL-файла и свой сервер. Но к сожалению это коммерческий продукт Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Февраль 02, 2011, 11:05 Есть готовое решение http://www.clausmark.com/index.php/feast.html (http://www.clausmark.com/index.php/feast.html) Спасибо, пополнил список продуктов. (пункт "FEAST")Насколько я знаю там есть генератор исходников с WSDL-файла и свой сервер. Но к сожалению это коммерческий продукт Но полагаю в смысле коммерческих продуктов, kdSoap выглядит привлекательнее - там есть возможность поиграться в начале с GPL. Кто пользовал KdSoap и|или FEAST? Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: twp от Февраль 02, 2011, 11:21 Я имел дело с FEAST, с версией 1.3 вроде, там использовалась СУБД (поддерживалось 3 типа СУБД) для логирования и еще для каких-то целей. И она была чисто виндовая. Потом ее выкинули с проекта и заменили своей разработкой. К тому времени появилась версия 2.3 в которая уже не нуждается в СУБД и она уже поддерживает Mac Os X и Linux.
Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: dem от Февраль 17, 2011, 14:22 WSF Staff теперь собирается под MinGW.
Дистрибутив собранный в GCC (MinGW): http://code.google.com/p/staff/downloads/detail?name=ws-win32-gcc4.5.2-staff-2.0.0-tp4-r399.7z Инструкция по установке: http://code.google.com/p/staff/wiki/InstallationManualWindowsBinary Создание С++ клиента, использующего Qt (из WSDL, в Qt Creator'e): http://code.google.com/p/staff/wiki/ExampleStockQuoteQtCreator Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Февраль 17, 2011, 15:24 WSF Staff теперь собирается под MinGW.<...> респект. обновил статусы и описания в стартовом посте.Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Март 11, 2011, 03:00 Пока не лень, отпишу ещё пару строк про gSOAP, раз уж я с ним уже завязался...
Начал отгребать немного проблем с Русскими буквами. но успешно вроде решил о чем тут и пишу "как это было". Просто как-то в документации об этом было не совсем внятно описано, пришлось зесть в дебри исходного кода и смотреть на что он там смотрит.... Поддержка Русского в контенте - строки и прочее (UTF-8). Если вы генерируете ws-сервер, и вам необходимо отдавать строки содержащие Русский язык, необходимо : - вебсервис инициировать с доп установками Код: myWsServiceClassGeneratedByGSOAP server(SOAP_IO_DEFAULT|SOAP_C_UTFSTRING); Код: QTextCodec *codec = QTextCodec::codecForName("UTF-8"); (ниже - updateEvent - это класс который я должен отдать на выходе, eventData - это поле типа std::string Код: QString returnRussianString; стоит отметить, что классы ws-сервера я генерировал из .h-описания (файл ws_interface_defenition.h) примерно такого вида: Код: //this string have to be included for ability to import STL types вот примерно такой строкой генерации классов веб-сервиса Код: soapcpp2 -s -t -x -i -S -IC:\ws\gsoap-2.8\gsoap\;C:\ws\gsoap-2.8\gsoap\import\; .\ws_interface_defenition.h За сим всем снова удачи. Название: Re: WSDL, SOAP, Web-Services + Qt (обзор, обсуждение, сбор ссылок) Отправлено: Denjs от Март 22, 2011, 23:05 Пока не лень, отпишу ещё пару строк про gSOAP, т.к. я с ним уже завязался и проект живет и развивается...
на этот раз про отладку и отслеживание сырых посылок (просмотр сырых SOAP-пакетов). Способ 1. В документации есть указание на то, что вы можете активировать "отладочный режим" работы генерируемых классов если в исходном тексте будет определен "DEBUG". Более того, в строке 740 (или около того) файла stdsoap2.h (тоже автогенерируемый) видим следующее: Код: //#define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */ Т.е. все понятно без комментариев. Все посылки, он будет скидывать в файлы. Удобно? ну уж лучше чем ничего)))) Способ 2 Способ 1 хорош, все работает... но надо пересобирать программу, и более того - если мне пакеты надо отслеживать только при ошибках - то это никак не годится... Например - надо проанализировать пакет, переданный мне Axis-сервером когда у него возник "500 - internal error"? Плюс, в таких случаях, мне нужен программный доступ к этим самым "сырым данным" в самом коде, а не в логе... В документации (http://www.cs.fsu.edu/~engelen/soapdoc2.html) я ответа не нашел (или пропустил...?). Поковырявшись в исходниках класса soap, нашел что класс предусматривает подключение обработчиков на события формирования и обработки "сырых данных". Вернее сырые данные туда передаются в качестве параметров... Что собственно и надо. В общем, код ниже думаю вам все расскажет. Для затравки и понимания механизмов думаю достаточно. Код: ... PS:Потом, как доиграемся до донца, расскажу про то, как к GSoap/Axis/Axis2 веб-сервисам подключать "мать-перемать-1цэ" в качестве клиента. |