Разработка клиента Apache HttpClient для Android, реализующего доступ к Web-сервису JAX-RS

Узнайте, как создать клиент Apache HttpClient для Android

Реализация доступа к Web-сервису JAX-RS с помощью библиотеки Apache HttpClient. Jersey, эталонная реализация JAX-RS, упрощает разработку Web-сервисов RESTful в среде Java™. Android является популярной платформой для смартфонов, и в этой статье рассказывается о том, как создать клиент JAX-RS для Android. Вы создадите клиент библиотеки Apache HttpClient для доступа к Web-сервису JAX-RS.

Дипак Вохра (Deepak Vohra), консультант, независимый

Дипак Вохра (Deepak Vohra) - Web-разработчик, независимый консультант, сертифицированный программист Java (Sun) и сертифицированный разработчик Web-компонентов (Sun). Статьи Дипак публиковались на сайтах ONJava.com, java.net, XML Journal и Oracle Magazine.



17.06.2012

Введение

Знакомство со Spring Android

Другую возможность реализации клиента предоставляет Spring Android. В этой статье, также написанной Дипаком Вохрой, вы узнаете, как реализовать доступ к Web-сервису RESTful с помощью клиента Spring Android REST:

Разработка клиента Spring для Android, реализующего доступ к Web-сервису JAX-RS

Программная архитектура REST опирается на концепции передачи состояния представления. Web-сервисы RESTful обладают целым рядом преимуществ: они просты, легковесны и быстры. Web-сервисы RESTful предоставляют набор ресурсов, доступных через URI. Эти ресурсы поддерживают HTTP-методы GET, POST, PUT и DELETE. Доступ к ресурсам может осуществляться в разных форматах, таких как HTML, простой текст, XML, PDF, JPEG или JSON. Интерфейс Java API для Web-сервисов RESTful определен в спецификации JSR 311. Jersey представляет собой эталонную реализацию JAX-RS, упрощающую разработку Web-сервисов RESTful на языке Java.

В этой статье мы используем библиотеку Apache HttpClient для создания клиента JAX-RS для Android — популярной платформы для смартфонов. Пример исходного кода для этой статьи можно загрузить здесь.


Подготовка рабочей среды

Часто используемые сокращения

  • API: интерфейс для программирования приложений
  • HTML: язык гипертекстовой разметки
  • HTTP: протокол передачи гипертекста
  • IDE: интегрированная среда разработки
  • JSON: система обозначений JavaScript
  • MIME: многоцелевые расширения электронной почты Интернет
  • POJO: простой объект Java
  • REST: передача состояния представления
  • SDK: комплект для разработки программ
  • UI: пользовательский интерфейс
  • URI: унифицированный идентификатор ресурса
  • URL: унифицированный указатель ресурса
  • XML: расширяемый язык разметки

Прежде чем приступать к созданию клиента для Web-сервиса JAX-RS, нужно подготовить рабочую среду. Ссылки на необходимые компоненты приведены в Ресурсах.

  1. Установите Eclipse
  2. Установите плагин Android Development Tools (ADT) для Eclipse, который предоставляет ряд расширений для разработки приложений Android в Eclipse.
  3. Установите платформу SDK для Android 2.2. Android SDK предоставляет средства разработки приложений для Android.
  4. Создайте виртуальное устройство Android Virtual Device (AVD), которое является эмулятором Android для Eclipse.
  5. Загрузите архив Jersey (jersey-archive-1.4.zip), содержащий JAR-файлы Jersey и основные зависимости. Загрузите пакет Jersey JAR (jersey-bundle-1.4.jar).

    Jersey основан на JDK 6.0, поэтому вам придется установить JDK 6.0.

  6. Установите Web-сервер, например, Tomcat или сервер приложений, например, WebSphere® или сервер WebLogic. Добавьте JAR-файлы Jersey, перечисленные в листинге 1, в CLASSPATH среды исполнения сервера приложений/Web-сервера.
    Листинг 1. JAR-файлы Jersey
    C:\Jersey\jersey-bundle-1.4.jar;C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar;
    C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar

Создание проекта Eclipse

В этом разделе вы создадите Web-проект и добавите в него аспект JAX-RS. Для создания проекта Eclipse используйте следующую процедуру.

  1. Выберите File > New(Файл > Создать) и в окне New (Создание файла) выберите Web > Dynamic Web Project(Web > динамический Web-проект). Щелкните Next (Далее).
  2. Введите имя проекта (например, AndroidJAX-RS) и, щелкнув на New Runtime (Создать среду исполнения), создайте новую среду исполнения для сервера WebSphere, Tomcat или WebLogic. Заполненное окно динамического Web-проекта показано на рисунке 1.
    Рисунок 1. Создание среды исполнения
    Screen capture of how to configure and create a new runtime project
  3. В окне New Server Runtime Environment (Создание новой среды исполнения сервера) выберите сервер, например, Tomcat, WebSphere или WebLogic. Щелкните Next, как показано на рисунке 2.
    Рисунок 2. Выбор приложения или Web-сервера
    Screen capture of selecting an application or web server
  4. В окне New IBM WebSphere v6.0 Runtime (Создание среды исполнения IBM WebSphere v6.0) выберите директорию для установки JRE и IBM WebSphere. Щелкните Next в диалоговом окне динамического Web-проекта. Выберите параметры Java по умолчанию для папок Source (Источник) и Output (Результат) и щелкните Next.
  5. Укажите AndroidJAX-RS в качестве корневой директории контекста, выберите директорию контента по умолчанию и щелкните Finish (Готово).

    Вновь созданный динамический Web-проект появится в обозревателе проектов (Project Explorer). Щелкните правой кнопкой на узле проекта и выберите Properties (Свойства).

  6. Выберите Project Facets (Аспекты проекта) и затем выберите аспект проекта JAX-RS (REST Web Services) 1.1. Щелкните Further configuration required (Необходима дополнительная настройка), как показано на рисунке 3.
    Рисунок 3. Настройка аспекта проекта JAX-RS
    Screen capture of configuring a JAX-RS Facet
  7. В окне JAX-RS Capabilities (Возможности JAX-RS) укажите имя сервлета (JAX-RS Servlet) и настройте библиотеку реализации JAX-RS. Выберите Type (Тип) User Library (Библиотека пользователя) и щелкните Manage (Управление).
  8. В окне User Libraries (Библиотеки пользователя) щелкните New (Создать). В диалоговом окне New User Library (Создание библиотеки пользователя) укажите имя библиотеки и щелкните OK.

    Библиотека пользователя добавлена. Щелкнув Add JARs (Добавить JAR), добавьте в библиотеку пользователя следующие JAR-файлы Jersey (как показано на рисунке 4:

    • jersey-bundle-1.4.jar
    • C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar
    • C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar
    Щелкните OK.
    Рисунок 4. Добавление JAR-файлов Jersey
    Screen capture of adding the Jersey JAR files to the build Path
  9. В окне возможностей JAX-RS укажите имя класса сервлета JAX-RS com.sun.jersey.spi.container.servlet.ServletContainer, как показано на рисунке 5. Щелкните OK.
    Рисунок 5. Укажите класс сервлета JAX-RS
    Screen capture of specifying the JAX-RS Servlet Class Name
  10. В окне Project Facets (Аспекты проекта) щелкните Apply (Применить), как показано на рисунке 6, а затем щелкните OK.
    Рисунок 6. Применение аспекта проекта JAX-RS
    Screen capture of applying the JAX-RS Facet

Теперь целевая среда исполнения настроена с помощью аспекта проекта JAX-RS. Щелкните OK в диалоговом окне Properties (Свойства).

Теперь в проект нужно добавить библиотеки пользователя JAX-RS и настроить в файле web.xml сервлет JAX-RS и привязки сервлета. Вам придется добавить элементы init-param для com.sun.jersey.config.property.resourceConfigClass и параметры инициализации com.sun.jersey.config.property.packages. Файл web.xml показан в листинге 2.

Листинг 2. Файл web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/
xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/
ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <servlet>
    <description>Созданные средства JAX-RS – Не изменять</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
        <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>jaxrs</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/jaxrs/*</url-pattern>
  </servlet-mapping>
</web-app>

Создание и запуск класса ресурса

Теперь нужно создать ресурс Web-сервиса RESTful с помощью корневого класса ресурса. Корневой класс ресурса представляет собой POJO, объявленный с помощью аннотации @PATH. Он содержит по крайней мере один метод, объявленный с помощью аннотации @PATH или с помощью @GET, @PUT, @POST или @DELETE.

  1. Выберите File > New > Other(Файл > Создать > Другой). В окне New (Создание файла) выберите Java > Class (Java > Класс) и щелкните Finish (Готово).
  2. В окне New Java Class (Создание класса Java) (рисунок 7), укажите:
    • Source folder (папку-источник): AndroidJAX-RS/src
    • Package(пакет): jaxrs
    • Class name (имя класса): HelloWorldResource

    Щелкните Finish.

    Рисунок 7. Создание класса ресурса
    Screen capture of creating a Resource Class

С помощью аннотации @PATH объявите класс Java. Код в листинге 3 указывает в качестве пути URI, где будет располагаться класс Java, значение /helloworld.

Листинг 3. Объявление класса ресурса с помощью аннотации @Path
@Path("/helloworld")
public class HelloWorldResource {
...
}

Чтобы добавить методы ресурса для создания трех разных типов MIME, добавьте методы getClichedMessage(), getXMLMessage() и getHTMLMessage(). Объявите каждый метод с помощью аннотации @GET, которая означает, что метод будет обрабатывать запросы HTTP GET. В качестве типа возвращаемого значения каждого метода укажите String. Объявите каждый метод с помощью аннотации @PRODUCES и укажите для каждого метода свой тип MIME.

Теперь давайте создадим метод, выводящий сообщение "Hello, JAX-RS", с помощью типов MIME text/plain, text/xml и text/html. Метод getXMLMessage объявляется с помощью аннотации @Produces ("text/xml"), которая генерирует XML-сообщение. Раскомментируйте только один из методов, объявленных с помощью метода @GET. Если другой путь в явном виде не указан, то запрос @GET направляется в метод, объявленный с помощью @GET. Если запрошенному URI соответствуют несколько методов, то для выбора метода ресурсов используется алгоритм выбора JAX-RS. Например, можно указать несколько методов с помощью аннотации @GET, используя разные пути path для методов, объявленных с помощью @GET. Корневой класс ресурса показан в листинге 4.

Листинг 4. HelloWorldResource.java
package jaxrs;

import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;

// Класс Java будет располагаться в URI //"/helloworld"
@Path("/helloworld")
public class HelloWorldResource {

    // Метод Java будет обрабатывать запросы HTTP GET
     @GET
   // Метод Java будет создавать контент, определяемый медиа-типом MIME
    // "text/plain"
     @Produces("text/plain")
     public String getClichedMessage() {
    // Возвращает канонический текст
     return "Hello Android";
     }

    // @GET
    // @Produces("text/xml")
    // public String getXMLMessage() {
    // return "<?xml version=\"1.0\"?>" + "<hello> Hello Android" + "</hello>";
    // }

//	@GET
    //@Produces("text/html")
    //public String getHTMLMessage() {
        //return "<html> " + "<title>" + "Hello Android" + "</title>"
            //	+ "<body><h1>" + "Hello Android" + "</body></h1>" + 
    "</html> ";
//	}

}

Запустите класс ресурса и создайте несколько разных результатов. Закомментируйте методы, которые не нужно проверять, и для каждого пробного запуска оставьте раскомментированным только один метод. Сначала проверим тип MIME text/xml. Запустите сервер приложений/Web-сервер (если он еще не запущен). Щелкните правой кнопкой на классе ресурса и выберите Run As > Run on Server (Запустить как > Запустить на сервере), как показано на рисунке 8 .

Рисунок 8. Запуск класса ресурса
Screen capture of the pop-up menu for the JAX-RS Application with Run As>Run on Server selected

В этом сервере параметр инициализации com.sun.jersey.config.property.resourceConfigClass инициализируется значением com.sun.jersey.api.core.PackagesResourceConfig, а параметр инициализации com.sun.jersey.config.property.packages значением jaxrs, как показано в файле web.xml. Обнаруживается корневой класс ресурса jaxrs.HelloWorldResource. Инициализируется приложение Jersey v1.4, и на сервере разворачивается модуль AndroidJAX-RS.


Создание проекта клиента Android

В этом разделе вы создадите проект Android, в котором создадите клиент JAX-RS для Android.

  1. В Eclipse IDE выберите File > New(Файл > Создать). В окне New (Создание файла) выберите Android > Android Project(Android > Проект Android) и щелкните Next (Далее).
  2. Заполните поля в окне создания нового проекта Android, как показано на рисунке 9.
    • Project name(имя проекта): AndroidJAXRSClient
    • Build Target(выбор API): Android Platform 2.2 API 8
    • Properties(свойства): Application name (имя приложения) AndroidJAXRSClient и Package name (имя пакета) android.jaxrs
    • Выберите Create Activity (Создать операцию) и укажите класс Activity AndroidJAXRSClient.

      Activity обеспечивает взаимодействие с пользователем, а класс, расширяющий класс Activity, создает окно для интерфейса пользователя.

    • Минимальная версия SDK: 8
    • Щелкните Next (Далее)
    Рисунок 9. Создание класса клиента JAX-RS
    Screen capture of creating a new Android Project with the New Android Project wizard

В состав проекта Android входят следующие файлы:

  • Класс (AndroidJAXRSClient), расширяющий класс Activity
  • Файл res/layout/main.xml, определяющий структуру приложения Android
  • Файл AndroidManifest.xml, содержащий информацию о конфигурации приложения, такую как имя пакета, компоненты приложения, процессы, разрешения и минимальный уровень API для системы Android

В файле res/layout/main.xml укажите структуру компонентов пользовательского интерфейса Android. Создайте LinearLayout с помощью android:orientation="vertical". Теперь создайте пользовательский интерфейс, в котором ответ Web-сервиса отображается в виде текстового сообщения. Добавьте элемент TextView с идентификатором jaxrs для отображения ответа Web-сервиса JAX-WS на вызов одного из методов get. Результатом работы метода будет сообщение Hello, выводимое в форме XML, HTML или простого текста. Основной файл main.xml показан в листинге 5.

Листинг 5. Файл main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical" android:layout_width="fill_parent"
     android:layout_height="fill_parent">
     <TextView android:id="@+id/jaxrs"
     android:layout_width="fill_parent" android:layout_height="wrap_content"
                />
</LinearLayout>

Для реализации доступа к Web-сервису JAX-RS из устройства Android установите разрешение android.permission.INTERNET в файле AndroidManifest.xml, которое позволяет приложениям открывать сетевые сокеты. Добавьте элемент uses-permission, как показано в листинге 6.

Листинг 6. Установка разрешения INTERNET
<uses-permission  android:name="android.permission.INTERNET"></uses-permission>

Укажите минимальную версию Android с помощью элемента uses-sdk. AndroidJAXRSClient, intent-filter и action указываются с помощью элемента activity и субэлементов. Файл AndroidManifest.xml показан в листинге 7.

Листинг 7. Файл AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.jaxrs" android:versionCode="1" android:versionName="1.0">
     <uses-sdk android:minSdkVersion="8" />
     <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".AndroidJAXRSClient" android:label="@string/app_name">
               <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
       </activity>
     </application>
     <uses-sdk android:minSdkVersion="8" />
     <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

В состав Android SDK входит библиотека Apache HttpClient. Импортируйте классы, показанные в листинге 8, в AndroidJAXRSClient.

Листинг 8. Библиотека Apache HttpClient
org.apache.http.HttpEntity;
org.apache.http.HttpResponse;
org.apache.http.client.ClientProtocolException;
org.apache.http.client.HttpClient;
org.apache.http.client.methods.HttpGet;
org.apache.http.impl.client.DefaultHttpClient;

Класс AndroidJAXRSClient расширяет класс Activity. Метод onCreate(пакет savedInstanceState) вызывается при первом вызове activity. Определите интерфейс пользователя с помощью метода setContentView и ресурса структуры, как показано в листинге 9.

Листинг 9. Определение интерфейса пользователя
setContentView(R.layout.main);

В листинге 10 показано, как создать объект TextView виджета Android путем применения метода findViewById к элементу TextView с идентификатором jaxrs, который был определен в файле main.xml.

Листинг 10. Создание виджета Android
TextView jaxrs = (TextView) findViewById(R.id.jaxrs);

Стандартной реализацией HttpClient является DefaultHttpClient. Создайте объект DefaultHttpClient, как показано в листинге 11.

Листинг 11. Создание HttpClient
HttpClient httpclient = new DefaultHttpClient();

Создайте объект HttpGet для извлечения информации c сервера, как показано в листинге 12. Определите URL, указывающий на ресурсы, размещенные по пути URI /helloworld. Вместо localhost укажите IP-адрес хоста. Клиент запускается на устройстве Android, а localhost устройства Android не является хостом, на котором работает Web-сервис JAX-RS (если только Web-сервис не расположен в том же устройстве Android, что к данному случаю не относится).

Листинг 12. Создание объекта HttpGet
HttpGet request = new HttpGet("http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld");

Укажите допустимые типы носителя с помощью заголовка Accept. Установите в заголовке Accept только один медиа-тип, соответствующий медиа-типу, создаваемому Web-сервисом JAX-RS. При первом запуске установите в заголовке Accept медиа-тип text/xml, чтобы результат выводился в форме text/xml, как показано в листинге 13.

Листинг 13. Установка заголовка Accept
request.addHeader("Accept", "text/xml");
//request.addHeader("Accept", "text/html");
//request.addHeader("Accept", "text/plain");

Проверьте ответ каждого типа (обычный текст, html и XML). Принятый тип ответа должен соответствовать типу MIME, создаваемому в классе ресурса. Тип MIME, создаваемый в классе ресурса, должен совпадать с допустимым типом MIME. Если создаваемый тип MIME и допустимый тип MIME не совпадают, то генерируется com.sun.jersey.api.client.UniformInterfaceException. К примеру, установите допустимый тип MIME как text/xml, а создаваемый тип MIME как application/xml. В результате вызывается исключение UniformInterfaceException. Для получения объекта HttpResponse вызовите метод execute(), принадлежащий HttpClient, передав в качестве аргумента метод HttpGet, как показано в листинге 14.

Листинг 14. Получение HttpResponse
HttpResponse response = httpclient.execute(request);

Получите HttpEntity из HttpResponse с помощью метода getEntity (листинг 15).

Листинг 15. Получение HttpEntity
HttpEntity entity = response.getEntity();

Получите содержимое из HttpGet в виде InputStream с помощью метода getContent() (листинг 16).

Листинг 16. Создание InputStream из HttpEntity
InputStream instream = entity.getContent();

Создайте StringBuilder для сообщения, возвращаемого Web-сервисом JAX-RS (листинг 17).

Листинг 17. Создание StringBuilder
StringBuilder sb =  new StringBuilder();

Создайте BufferedReader из InputStream (листинг 18).

Листинг 18. Создание BufferedReader
BufferedReader r = new BufferedReader(new InputStreamReader(instream));

Считайте все строки из BufferedReader и добавьте их в StringBuilder (листинг 19).

Листинг 19. Чтение BufferedReader
for (String line = r.readLine(); line != null; line = r.readLine()) {
             sb.append(line);	
}

Получаем сообщение String из StringBuilder и закрываем InputStream (листинг 20).

Листинг 20. Получение сообщения StringBuilder
String jaxrsmessage = sb.toString();		
instream.close();

Установите сообщение String в компоненте интерфейса пользователя TextView (листинг 21).

Листинг 21. Установка сообщения StringBuilder
jaxrs.setText(jaxrsmessage);

В листинге 22 показан класс AndroidJAXRSClient.

Листинг 22. AndroidJAXRSClient.java
package android.jaxrs;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class AndroidJAXRSClient extends Activity {
     /** Вызывается при первом создании activity.  */
     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);

          TextView jaxrs = (TextView) findViewById(R.id.jaxrs);
          try {
               HttpClient httpclient = new DefaultHttpClient();
               HttpGet request = new HttpGet(
                  "http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld");

               //request.addHeader("Accept", "text/html");
          //	request.addHeader("Accept", "text/xml");
               request.addHeader("Accept", "text/plain");
               HttpResponse response = httpclient.execute(request);
               HttpEntity entity = response.getEntity();
               InputStream instream = entity.getContent();
               String jaxrsmessage = read(instream);
               jaxrs.setText(jaxrsmessage);
          } catch (ClientProtocolException e) {
               e.printStackTrace();
          } catch (IOException e) {
               e.printStackTrace();
          }

     }

     private static String read(InputStream instream) {
          StringBuilder sb = null;
          try {
               sb = new StringBuilder();
               BufferedReader r = new BufferedReader(new InputStreamReader(
                         instream));
          for (String line = r.readLine(); line != null; line = r.readLine()) {
               	sb.append(line);
			}

			instream.close();

          } catch (IOException e) {
          }
          return sb.toString();

     }

}

На рисунке 10 показана структура директории клиентского приложения Android. (Увеличенная версия рисунка 10.)

Рисунок 10. Структура директории приложения Android
Screen capture of the directory structure of the Android Client Application

Запуск клиента Android

Теперь можно запустить клиент Android, чтобы вызвать Web-сервис JAX-RS и вывести XML-сообщение. Щелкните правой кнопкой на проекте AndroidJAXRSClient и выберите Run As > Android Application(Запустить как > приложение Android), как показано на рисунке 11.

Рисунок 11. Запуск клиента Android JAX-RS
Screen capture of Right-click on the Android Application and select Run As>Android Application

Запустится Android AVD, и клиентское приложение JAX-RS будет установлено на устройство Android, как показано на рисунке 12.

Рисунок 12. Установка клиента Android JAX-RS на Android
Screen capture of the Android JAX-WS Client installed on Android

Запустится операция AndroidJAXRSClient, и на устройство Android будет выведено XML-сообщение, созданное Web-сервисом JAX-RS, как показано на рисунке 13.

Рисунок 13. Вывод XML-сообщения на устройство Android
Screen capture of outputting an XML message to an Android device

Аналогичным образом, если в классе ресурса раскомментировать метод, создающий медиа-тип text/html, и настроить заголовок Accept на прием этого медиа-типа, будет выводиться сообщение HTML. К примеру, давайте раскомментируем соответствующий метод в классе ресурса, как показано в листинге 23.

Листинг 23. Создание HTML в классе ресурса
@GET
@Produces("text/html")
public String getHTMLMessage() {
          return "<html> " + "<title>" + "Hello Android" + "</title>"
     + "<body><h1>" + "Hello Android" + "</body></h1>" + "</html> ";
     }

В классе клиента раскомментируйте вызов addHeader, как показано в листинге 24.

Листинг 24. Установка медиа-типа для Accept
request.addHeader("Accept", "text/html");

Перезапустите приложение AndroidJAXRSClient, чтобы получить ответ в форме HTML, как показано на рисунке 14.

Рисунок 14. Вывод HTML на устройство Android
Screen capture of outputting an HTML Message to an Android device

Чтобы получить текстовый ответ, раскомментируйте соответствующий метод в классе ресурса, как показано в листинге 25.

Листинг 25. Создание текстового медиа-типа в классе ресурса
@GET
@Produces("text/plain")
public String getClichedMessage() {
return "Hello Android";
 }

В классе клиента раскомментируем следующий медиа-тип в заголовке Accept (листинг 26).

Листинг 26. Установка заголовка Accept
request.addHeader("Accept", "text/plain");

Перезапустите приложение AndroidJAXRSClient для вывода текстового сообщения, как показано на рисунке 15.

Рисунок 15. Вывод текстового сообщения на устройство Android
Screen capture of outputting a text message to an Android device

Заключение

В этой статье вы узнали, как создать Web-сервис JAX-RS и вызвать его из клиента Android. В ходе изучения вы отправили на устройство Android сообщения в виде XML, HTML и простого текста.


Загрузка

ОписаниеИмяРазмер
Исходный код для статьиandroid-jaxrs-sourcecode.zip852 КБ

Ресурсы

Научиться

Получить продукты и технологии

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Open source, SOA и web-сервисы
ArticleID=821436
ArticleTitle=Разработка клиента Apache HttpClient для Android, реализующего доступ к Web-сервису JAX-RS
publish-date=06172012