Подтвердить что ты не робот

Создание Java из WSDL для использования на Android с клиентом ksoap2-android SOAP?

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Генератор wsdl для java, однако, работает просто отлично и сэкономит массу времени.

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

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

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

Ответ 2

Я нашел этот инструмент для автоматического создания 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);
}

Ответ 3

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

http://easywsdl.com/

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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