Https web service android

Программирование клиента для SOAP и REST web-сервиса в Android

Одной из задач, часто решаемых разработчиками мобильного софта, является получение данных от удаленногоweb сервиса. Этот процесс включает в себя несколько этапов: отправка запрос web-сервису, получение ответа и парсинг ответа с целью получения данных. В Android нет встроенного SOAP клиента, однако существует несколько довольно неплохих сторонних библиотек. Мы не будем пользоваться чужими поделками, а разработаем собственный клиент на базе Android API.

SOAP(Simple Object Access Protocol) это основанный на XML протокол, предназначенный для обмена данными между распределенными приложениями. REST(Representational State Transfer)- архитектура позволяющая строить распределенные, масштабируемые приложения. Основная задача сервера в этой архитектуре предоставить клиентам доступ к ресурсам по их идентификаторам (URI). Под доступом подразумевается как получение информации, так и ее изменение. SOAP и REST строятся поверх существующих web протоколов, например HTTP. Я не буду здесь вдаваться в детали, если Вы не знакомы с темой, рекомендую посмотреть вот этустатью.

Формат запроса для SOAP сервису

Прежде чем переходить к написанию кода, давайте посмотрим на структуру SOAP.

Обычный SOAP запрос выглядит так:

То есть SOAP запрос/ответ передается как пакет (SOAP Envelope), состоящий из заголовка (SOAP Header) и тела (SOAP Body).SOAP Header — вспомогательный компонент, содержащий конфиденциальную информацию для приложения, например параметры аутентификации.SOAP Body — это сообщение с полезной информацией. Заголовок может также содержать SOAP Action, который определяет функцию, запрашиваемую сервисом.

Отправка запроса SOAP-сервису

Чтобы вызвать SOAP-сервис вы должны сделать две вещи:
Во-первых, вручную сконструировать SOAP пакет, например вот так:

где %s метка формата. С помощью метода String.format на ее место будет подставлятся конкретное значение.

Во-вторых, вызвать web-сервис, например так:

После вызова этой функции Вы получите ответ, который будет виглядеть как-то так:

Этот ответ нужно разобрать XML парсером и извлечь нужные данные.

Отправка запроса REST-сервису

Расбота с REST-сервисом намного проще. Вы должны вызвать сервис, передав ему URL с параметрами, например вот так:

Пример вызова REST сервиса:

Соединение с web-сервисом по протоколу Secure Sockets Layer (SSL)

HttpClinet не поддерживает SSL соединения, поэтому если Вам необходимо работать с защищенным web-сервисом, то используйте javax.net.ssl.HttpsURLConnection. Ниже приведен пример, иллюстрирующий работу с SSL SOAP web-сервисом.

Итак, мы отправили запрос web-сервису и получили ответ в виде строки. Настало время использовать парсер.

Использование парсера в Android

В зависимости от реализации сервиса в ответ на наш запрос может прийти ответ в формате XML, SOAP или JSON.

Программирование XML парсера в Android

Рассмотрим конкретный пример. Допустим, нам пришел XML ответ, содержащий имя, фамилию и возраст пользователя:

С помощью этих параметров нужно создать объект класса Person:

Использование DOM Parser

В библиотекаorg.w3c.dom можно найти классы, с помощью которых можно разобрать xml, создав документ и сравнив каждый узел с шаблоном. Приведенная ниже функция использует DOM парсер:

Читайте также:  Powerdirector pro для андроид

Показаный метод работает, однако для его использования нужно знать структуру разбираемого xml и порядок перечисления узлов. Более гибок в этом плане SAX парсер.

Использование SAX Parser

SAX Parser находится в пакетеorg.xml.sax. В процессе разбора документа SAX генерирует события, для которых программист должен написать обработчики. Создадим класс-потомок основе классаDefaultHandlerи переопределим следующие методы:

  • startDocument(): Этот метод вызывается при открытии XML документа.
  • startElement(String uri, String localName, String qName, Attributes attributes): вызывается, когда парсер встречает XML-узел.
  • endElement(String uri, String localName, String Name): вызывается, когда парсер считал закрывающий тег.
  • characters(char[] ch, int start, int length): этот метод вызывается, когда парсер считывает данные из узла.

Напишем класс для парсинга нашего примера

Код довольно прост. Парсер проходится по всем узлам, и в зависимости от считанного тега, вы выполняете то или иное действие. Используем этот класс:

Программирование JSON парсера в Android

Некоторые сервисы могут вернуть ответ не в виде XML, а как JSON массив:

Здесь мы видим JSON массив persons, содержащий несколько JSON объектов person. На самом деле, работать с JSON намного проще, чем с XML:

Обратите внимание, здесь мы использовали методы optJSONArray, optString, optInt вместо getString, getInt, поскольку opt-методы эти методы возвращают пустую строку или 0, если какой-то элемент не найден, в то время как get-методы генерируют исключения.

Источник

Как вызвать веб-службу SOAP на Android

У меня возникли проблемы с поиском хорошей информации о том, как вызвать стандартный веб-сервис SOAP/WSDL с Android. Все, что мне удалось найти, — это либо очень запутанные документы, либо ссылки на «kSoap2», а затем немного о разборке всего этого вручную с помощью SAX. Хорошо, это хорошо, но это 2008 год, поэтому я решил, что должна быть хорошая библиотека для вызова стандартных веб-сервисов.

Веб-сервис в основном создан в NetBeans. Я хотел бы иметь поддержку IDE для создания классов сантехники. Мне просто нужен самый простой/самый элегантный способ связаться с веб-сервисом

ОТВЕТЫ

Ответ 1

Android не предоставляет никакой библиотеки SOAP. Вы можете либо написать свой собственный, либо использовать что-то вроде kSOAP 2. Как вы заметили, другие смогли скомпилировать и использовать kSOAP2 в своих проектах, но мне это не пришлось.

Google пока не проявил большого интереса к добавлению SOAP-библиотеки на Android. Мое подозрение в этом заключается в том, что они предпочли бы поддерживать текущие тенденции в веб-сервисах для сервисов на основе REST и использовать JSON в качестве формата инкапсуляции данных. Или, используя XMPP для обмена сообщениями. Но это всего лишь гипотеза.

Веб-службы на основе XML — это немного нетривиальная задача на Android в настоящее время. Не зная NetBeans, я не могу говорить с имеющимися там инструментами, но я согласен с тем, что должна быть доступна лучшая библиотека. Возможно, XmlPullParser избавит вас от использования SAX, но я мало что знаю об этом.

Ответ 2

org.apache.http.impl.client.DefaultHttpClient по умолчанию поставляется в Android SDK. Это поможет вам подключиться к WSDL.

Ответ 3

Это правда, что из-за этого SOAP не является лучшим выбором для обмена данными с мобильными устройствами. Однако вы можете оказаться в ситуации, когда вы не контролируете формат вывода сервера.

Итак, если вам нужно придерживаться SOAP, для Android здесь есть библиотека kSOAP2:
http://code.google.com/p/ksoap2-android/

Ответ 4

Чтобы вызвать веб-службу с мобильного устройства (особенно на телефоне Android), я использовал очень простой способ сделать это. Я не использовал API-интерфейс клиента веб-сервиса, чтобы вызвать веб-службу. Мой подход заключается в том, чтобы позвонить.

  • Создание простого HTTP-соединения посредством с использованием стандартного API Java HttpURLConnection .
  • Форма запроса SOAP. (Ты можешь сделать помощь SOAPUI сделать SOAP запрос.)
  • Установите флаг doOutPut как истинный.
  • Задайте значения заголовков HTTP, например контент-длина, контент тип и User-agent. Не забудь для установки значения Content-length, поскольку оно является обязательным.
  • Введите весь запрос SOAP в выходной поток.
  • Вызовите метод для подключения и получить ответ (в моем случае я использовал getResonseCode ).
  • Если ваш полученный код ответа как
    1. Это означает, что вам удастся вызвать веб-службу.
Читайте также:  Getid method in android

Теперь возьмите входной поток на том же HTTP и получить строковый объект. Этот строковый объект ответ SOAP. Если код ответа отличается от 200 затем возьмите поток ErrorInput тот же HTTP-объект и получить ошибка, если таковая имеется. Анализ полученного ответа используя SAXParser (в моем случае) или DOMParaser или любой другой синтаксический анализ механизм.

Я выполнил эту процедуру для телефона Android, и он успешно работает. Я могу разобрать ответ, даже если он больше 700 КБ.

Ответ 5

SOAP — это плохо подходящая технология для использования на Android (или мобильных устройствах в целом) из-за требуемых служебных данных обработки/обработки. Услуги REST — это более легкое решение для весов и то, что я бы предложил. Android поставляется с синтаксическим анализатором SAX, и его довольно тривиально использовать. Если вам абсолютно необходимо обрабатывать или анализировать SOAP на мобильном устройстве, тогда мне жаль вас, лучший совет, который я могу предложить, — это просто не использовать SOAP.

Ответ 6

Примерно год назад я читал эту тему, пытаясь понять, как делать SOAP-вызовы на Android — предложения по созданию моего собственного использования HttpClient привели к тому, что я создал свою собственную SOAP-библиотеку для Android:

В основном это позволяет вам создавать конверты для отправки через простой Java API, а затем автоматически анализирует их на объекты, которые вы определяете с помощью XPath. например:

Я использовал его для своего собственного проекта, но я решил, что это может помочь некоторым другим людям, поэтому я потратил некоторое время на его разделение и документирование. Мне бы очень понравилось, если некоторые из ваших бедных душ, которые наткнулись на эту нить, в то время как googling «SOAP Android» могут дать ему преимущество и получить некоторую выгоду.

Ответ 7

НЕ ЗАБЫВАЙТЕ ADD ksoap2.jar в вашем проекте, а также добавьте Разрешение INTERNET в файле AndroidManifest

Ответ 8

У меня была моя попытка с KSOAP; Я выбрал более простой подход.

С учетом WSDL файла создайте шаблоны запроса SOAP для каждого запроса (например, используя SOAP-интерфейс), а затем замените значения, которые будут переданы в коде. Отправьте эти данные в конечную точку службы с помощью экземпляра DefaultHttpClient и получите поток ответов. Разбирайте поток ответов с помощью парсера XML Pull.

Ответ 9

Вы можете посмотреть WSClient ++

Ответ 10

Я создал новый SOAP-клиент для платформы Android. Он использует созданный JAX-WS интерфейс, но до сих пор он является лишь доказательством концепции.

Если вам интересно, попробуйте пример и/или посмотрите источник в AndroidSOAP.

Ответ 11

Если хотите, пойдите в JSON. Android поставляется с полным пакетом org.json

Ответ 12

Вызвать ksoap2. Он работает очень хорошо.

Настройте детали, например

а затем для получения результата do

Ответ 13

Ответ 14

Я уверен, что вы можете сделать небольшой SOAP-клиент с Axis. Инструкции по установке Axis.

Читайте также:  Ps remote play настройка андроид

Ответ 15

Несколько месяцев назад я работал с веб-службой jax-ws в приложении j2ee. Там мы использовали CXF wsdl2java для создания клика клиента WS с файл WSDL и с этими клиентскими заглушками мы использовали веб-службы. Несколько недель назад, когда я пытался использовать веб-сервис так же на платформе Android, я не мог, потому что в андроид-банке не все поддерживающие классы «jax-ws». В то время я не нашел такого инструмента (если бы мне не удалось эффективно работать с Google), чтобы удовлетворить мое требование —

  • Получить клиентскую заглушку из WSDL.
  • И вызовите службу с некоторым аргументом (бизнес-запрос java объект).
  • Получить бизнес-объект Response.

Итак, я разработал собственный Android SOA Client Generation Tool. Если вам необходимо выполнить следующие действия:

  • Из WSDL Get WS Client Stub, поместите его в свой проект.
  • Скажите о некотором сервисе «ComplexOperationService», Сервис, получить порт конечной точки и вызвать метод службы и получить ответ от веб-службы:
  • Вам не нужно заботиться о классах класса обслуживания /req/response или любых других классах и методе, так как вы знаете, что все они созданы из WSDL.
  • И, конечно же, вам не нужно знать о действии/оболочке мыла/пространстве имен и т.д. Просто вызовите метод, поскольку мы, разработчики, делаем все это время.

Ответ 16

Ответ 17

Если вы можете использовать JSON, есть документ, видео и sample.code в Разработка приложений с серверами PHP и Android Phone Clients.

Ответ 18

Выполните следующие шаги с помощью метода SOAP

создайте шаблоны запросов SOAP для каждого запроса.

Затем замените значения, которые будут переданы в коде.

Отправьте эти данные в конечную точку службы, используя экземпляр DefaultHttpClient.

Получить поток ответов и, наконец,

Проведите анализ потока ответов с помощью парсера XML Pull.

Ответ 19

Для меня самый простой способ — использовать хороший инструмент для создания всех необходимых классов. Лично я использую этот сайт:

Он поддерживает довольно сложные веб-службы и использует ksoap2.

Ответ 20

Я бы предложил проверить очень полезный инструмент, который мне очень помог. Парни которые позаботились об этом проекте, тоже очень помогли. www.wsdl2code.com/

Ответ 21

Если у вас возникла проблема с вызовом веб-службы в android, вы можете использовать нижеприведенный код для вызова веб-службы и получения ответа. Убедитесь, что веб-служба возвращает ответ в формате таблицы данных. Этот код поможет вам, если вы используете данные из базы данных SQL Server. Если вы используете MYSQL, вам нужно изменить одну вещь, просто замените слово NewDataSet из предложения obj2=(SoapObject) obj1.getProperty(«NewDataSet»); по DocumentElement

Если у вас есть какие-либо проблемы, вы можете написать мне..

Ответ 22

Это рабочий пример использования веб-сервисов SOAP в android.

** Примечание:: *** НЕ ЗАБУДЬТЕ ADD ksoap2.jar в вашем проекте, а также добавьте разрешение INTERNET в файл AndroidManifest *

Ответ 23

Загрузите и добавьте файл библиотеки SOAP с вашим проектом Имя файла: ksoap2-android-assembly-3.4.0-jar-with-dependencies

Очистите приложение, а затем запустите программу

Вот код для вызова службы SOAP

Результатом может быть JSONObject или JSONArray или String

Ответ 24

Чтобы вызвать веб-службу SOAP с android, попробуйте использовать этот клиент

НЕ ЗАБУДЬТЕ ADD ksoap2-android.jar в вашем пути построения Java

Ответ 25

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

Ответ 26

Добавить мыло Libaray ( ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar ):

public static String Fn_Confirm_CollectMoney_Approval (

Источник

Оцените статью