Создание Java из WSDL для использования на Android с SOAP-клиентом ksoap2-android? - PullRequest
33 голосов
/ 03 февраля 2012

Мне нужно получить доступ к существующему веб-сервису SOAP из приложения Android.Мне были предоставлены некоторые файлы WSDL, описывающие веб-сервис.Читая некоторые другие ответы здесь на SO , кажется, что ksoap2-android - это путь, который следует использовать в отношении того, какой клиент SOAP использовать.

Следующая проблемазатем, как сгенерировать классы Java, необходимые из файлов WSDL, и вот где я остановлюсь.Насколько я вижу, есть следующие опции:

  1. Генератор кода AXIS2
  2. WSDL2ksoap
  3. JAX-WS wsimport tool

Сначала я попробовал # 1 с плагином AXIS2 eclipse для генератора wsdl2code.Мастер успешно сгенерировал много Java-кода, однако он также изменил мой проект Android на какой-то проект веб-сервиса, и я так и не смог получить ничего, что было сгенерировано для компиляции, не говоря уже о работе с ksoap2-android.Кто-нибудь имеет успех с этим?

Я не могу успешно запустить wsdl2ksoap, так как, похоже, требуется работающий веб-сервис, и все, что у меня есть на текущий момент времени, это файлы WSDL.Аналогично, после прочтения веб-страницы, кажется, что это проект на начальных этапах, и он не готов к прайм-тайму.

JAX-WS wsimport У меня еще не было возможности попробовать.Однако я не уверен, что то, что он сгенерирует, будет работать с ksoap2-android?

Вопрос: Как сгенерировать файлы Java из файлов WSDL для использования на Android с клиентской библиотекой SOAP ksoap2-android?

Заранее большое спасибо.

(PS: Да, выбор SOAP, он неоптимален для использования Android, но я не могу это изменить.)

Ответы [ 6 ]

14 голосов
/ 02 августа 2012

Я нашел этот инструмент для автоматического создания кода WSDL для Android,

http://www.wsdl2code.com/example.aspx

Вот код:

public void callWebService()    {
    SampleService srv1 = new SampleService();
    Request req = new Request();
    req.companyId = "1";
    req.userName = "userName";
    req.password = "pas";
    Response response =  srv1.ServiceSample(req);
}
11 голосов
/ 13 ноября 2013

У меня была похожая ситуация (у меня был только файл wsdl без работающего веб-сервиса).Я использовал

http://easywsdl.com/

для генерации классов для Android без каких-либо проблем.Этот инструмент использует библиотеку ksoap.Преимущество этого инструмента в том, что он поддерживает расширения и типы WCF, такие как контракт данных с атрибутом IsReference или Guid.

10 голосов
/ 14 февраля 2012

Мой вывод после долгих исследований состоит в том, что такого (зрелого) инструмента, к сожалению, нет.Ни AXIS2, ни JAX-WS не будут работать на Android, а WSDL2ksoap просто слишком незрелый для любого реального использования.

Однако есть проприетарный инструмент под названием wsclient ++ , который отлично справится с этой работой.(Прочитайте обновление ниже, когда оно используется в реальных условиях, оно вообще не выдерживает расстояния.) Оно не использует клиентскую библиотеку ksoap2-android, оно имеет свою собственную.

Клиентская библиотека немного сыраяпоскольку он сильно зависит от транспорта http, что делает (модульное) тестирование немного сложным.Но его можно довольно легко изменить, чтобы разрешить DI, поскольку исходный код доступен в распределенном jar-файле.

Однако генератор wsdl to java работает просто идеально и сэкономит нам массу времени.

Обновление После некоторой работы с wsclient++ становится ясно, что сгенерированные классы действительно грубые и совсем не обрабатывают ошибки.(Каждый метод объявляет throws Exception).

Мы больше не используем wsclient ++, и я бы никому не рекомендовал его использовать! К сожалению, мы не нашли какой-либо работающей альтернативы.: /

В конце мы конвертировали наши WSDL-файлы, используя AXIS2, а затем написали несколько пользовательских скриптов для разметки и преобразования сгенерированных java-файлов во что-то, что будет построено на Android с помощью библиотеки ksoap2-android.Очень хакерский и нуждается в тоннах ручного труда, чтобы бежать.К несчастью.Если вы найдете лучший способ или подходите, пожалуйста, предоставьте новый ответ.

1 голос
/ 21 октября 2013

Я также использовал для iPhone некоторые сгенерированные автоматически классы, которые я тоже хотел увидеть здесь.

wsdl2code - одно из тех, что я использовал на iPhone. Дайте URL с файлом wsdl, и вы получите несколько классов для загрузки. Для меня самым сложным было загрузить необходимые части. Поиск занял более 2 минут :) ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar, необходимое для загрузки рекламы в ADT (Eclipse). Это очень легко, особенно если вы использовали аналог на iPhone. - аналогичный инструмент, который я использовал.

Однако в моем случае я совсем не доволен решением, потому что вижу, что использую пушку, набор пушек для стрельбы по воробью. В моем случае это должен быть HTTP Post без учета зависимостей от других библиотек.

Честно говоря, мне все равно, потому что, как только серверная сторона считает, что у нас неограниченный заряд батареи и безлимитный тарифный план, я закрываю глаза, и мне наплевать на маршалинг-демаршалинг, который использует Процессор (аккумулятор) увеличивает объем данных, передаваемых по сети.

В худшем случае это должен быть JSON + HTTP POST, а не SOAP для мобильных телефонов ...

Я бы предложил поговорить с ребятами на стороне сервера и объяснить, почему им будет плохо, если они сделают 2 клика по мастерам, а мы сделаем другой щелчок по формам, чтобы получить сгенерированный код. По крайней мере, в то время как приложение не является огромным, даже чем должен быть бюджет, чтобы оптимизировать для мобильных устройств несколько реализаций интерфейсов.

0 голосов
/ 18 апреля 2012

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

http://ksoap2 -stub-gen.sourceforge.net /

Также кто-то сделал его доступным в качестве онлайн-службы (т.е. вы дадите URL своего WSDL, и служба вернет zip-файл, содержащий заглушки).

http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/

0 голосов
/ 09 марта 2012

Я использую инструмент Apache CXF просто для создания dto, и я написал класс для выполнения базового демаршаллинга на основе имени элементов

...