REST ソフトウェア・アーキテクチャーではリソースの表現を転送します。単純、軽量、高速といったメリットがある RESTful な Web サービスでは、URI によって特定される一連のリソースを公開し、これらのリソースは HTTP の GET、POST、PUT、DELETEメソッドに応答します。リソースにアクセスするためのフォーマットには、HTML、プレーン・テキスト、XML、PDF、JPEG、JSON などがあります。JAX-RS (Java API for RESTful Web services) は JSR 311 で定義されています。Jersey は JAX-RS のリファレンス実装であり、Jersey を使用すると RESTful な Web サービスを Java で簡単に作成することができます。
この記事では、人気のスマートフォン・プラットフォームである Android 用の JAX-RS クライアントを Apache HttpClient ライブラリーを使用して作成する方法について説明します。この記事で使用するサンプル・コードは「ダウンロード」セクションからダウンロードすることができます。
JAX-RS Web サービスのクライアントを作成する前に、環境を構築する必要があります。「参考文献」のリンクを参照してください。
- Eclipse をインストールします。
- Eclipse に ADT (Android Development Tools) プラグインをインストールします。ADT には Eclipse で Android アプリケーションを作成するための一連の拡張機能が用意されています。
- SDK Platform Android 2.2 をインストールします。Android SDK には Android アプリケーションを作成するためのツールが用意されています。
- Android のエミュレーター、AVD (Android Virtual Device) を Eclipse で作成します。
- Jersey の JAR と主な依存関係を含む Jersey アーカイブ (jersey-archive-1.4.zip) をダウンロードします。Jersey バンドルのJAR である jersey-bundle-1.4.jar をダウンロードします。
Jersey は JDK 6.0 を使用してビルドされています。そのため、JDK 6.0 もインストールする必要があります。
- Tomcat などの Web サーバー、または WebSphere や WebLogic
サーバーなどのアプリケーション・サーバーをインストールします。リスト 1 に示す Jersey の JAR ファイルをアプリケーション・サーバーまたは Web
サーバーのランタイムの
CLASSPATHに追加します。
リスト 1. Jersey の JAR ファイル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
このセクションでは、Web プロジェクトを作成し、そのプロジェクトに JAX-RS ファセットを追加します。以下のステップで Eclipse プロジェクトを作成します。
- 「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」の順に選択し、表示される「New (新規)」ウィンドウで 「Web」 > 「Dynamic Web Project (動的 Web プロジェクト)」の順に選択したら、「Next (次へ)」をクリックします。
- プロジェクト名を指定し (例えば AndroidJAX-RS など)、「New Runtime (新規ランタイム)」をクリックし、WebSphere、Tomcat、または WebLogic サーバー用の新規ターゲット・ランタイムを構成します。図 1 に入力が完了した「Dynamic Web Project (動的 Web プロジェクト)」ウィンドウを示します。
図 1. 新規ランタイムを構成する
- 「New Server Runtime Environment (新規サーバー・ランタイム環境)」ウィンドウで、サーバーを選択し (Tomcat
サーバー、WebSphere サーバー、WebLogic サーバーなど)、図 2 のように「Next (次へ)」をクリックします。
図 2. アプリケーション・サーバーまたは Web サーバーを選択する
- 「New IBM WebSphere v6.0 Runtime (新規 IBM WebSphere v6.0 ランタイム)」ウィンドウで、JRE と、 IBM WebSphere のインストール・ディレクトリーを構成します。「Dynamic Web Project (動的 Web プロジェクト)」ダイアログで「Next (次へ)」をクリックします。「Source folders on build path (ビルド・パス上のソース・フォルダー)」と「Default output folder (デフォルト出力フォルダー)」には Java のデフォルト設定を選択し、「Next (次へ)」をクリックします。
- 「Context root (コンテキスト・ルート)」には「
AndroidJAX-RS」と指定し、「Content Directory (コンテンツ・ディレクトリー)」はデフォルト値を選択した後、「Next (次へ)」をクリックします。動的な Web プロジェクトが作成され、「Project Explorer (プロジェクト・エクスプローラー)」に追加されます。そのプロジェクトのノードを右クリックし、「Properties (プロパティー)」を選択します。
- 「Project Facets (プロジェクト・ファセット)」を選択した後、「JAX-RS (REST Web
Services) 1.1」というプロジェクト・ファセットを選択します。図 3 のように「Further configuration
required (より詳しい構成が必要)」をクリックします。
図 3. JAX-RS プロジェクト・ファセットを構成する
- 「JAX-RS Capabilities (JAX-RS 機能)」ウィンドウで、「JAX-RS servlet name (JAX-RS サーブレット名)」を「JAX-RS Servlet」と指定し、JAX-RS 実装ライブラリーを構成します。JAX-RS 実装ライブラリーのタイプとしては、「Type (型)」フィールドで「User Library (ユーザー・ライブラリー)」を選択し、「Manage libraries (ライブラリーを管理)」をクリックします。
- 「User Libraries (ユーザー・ライブラリー)」ウィンドウでは、「New (新規)」をクリックします。「New User
Library (新規ユーザー・ライブラリー)」ダイアログでユーザー・ライブラリーの名前を指定し、「OK」をクリックします。
これにより、ユーザー・ライブラリーが追加されます。「Add JARs (JAR 追加)」をクリックし、ユーザー・ライブラリーに Jersey JAR を追加します。図 4 のように、以下の Jersey JAR を追加します。
- 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. Jersey JAR ファイルを追加する
- 「JAX-RS Capabilities (JAX-RS 機能)」ウィンドウで、図 5 のように「JAX-RS servlet class name (JAX-RS
サーブレット・クラス名)」に「
com.sun.jersey.spi.container.servlet.ServletContainer」を指定して、「OK」をクリックします。
図 5. JAX-RS サーブレット・クラス名を指定する
- 図 6 のように「Project Facets (プロジェクト・ファセット)」ウィンドウで「Apply
(適用)」をクリックし、続いて「OK」をクリックします。
図 6. JAX-RS プロジェクト・ファセットを適用する
ターゲット・ランタイムは JAX-RS プロジェクト・ファセットによって構成されます。「Properties (プロパティー)」ダイアログで「OK」をクリックします。
JAX-RS ユーザー・ライブラリーがプロジェクトに追加され、JAX-RS Servlet とサーブレット・マッピングが web.xml
の中で構成されます。com.sun.jersey.config.property.resourceConfigClass と
com.sun.jersey.config.property.packages に初期化パラメーターとして init-param 要素を追加する必要があります。リスト 2 は web.xml を示しています。
リスト 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 Tools Generated - Do not modify</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> |
次のステップとして、ルート・リソース・クラスを使用して RESTful な Web サービスのリソースを作成します。ルート・リソース・クラスは @PATH アノテーションが付けられた POJO です。このクラスは、アノテーションとして @PATH または @GET、@PUT、@POST、@DELETE が付けられた少なくとも 1 つのメソッドで構成されます。
- 「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」の順に選択します。「New (新規)」ダイアログで「Java」 > 「Class (クラス)」の順に選択し、「Next (次へ)」をクリックします。
- 図 7 のように、「New Java Class (新規 Java クラス)」ウィンドウで以下のように指定します。
- Source folder (ソース・フォルダー):
AndroidJAX-RS/src - Package (パッケージ):
jaxrs - Name (名前):
HelloWorldResource
「Finish (完了)」をクリックします。
図 7. リソース・クラスを作成する
- Source folder (ソース・フォルダー):
この Java クラスに @PATH アノテーションを付けます。リスト 3 のコードは、この Java
クラスをホストする URI のパスを /helloworld と指定しています。
リスト 3. リソース・クラスに @PATH アノテーションを付ける
@Path("/helloworld")
public class HelloWorldResource {
...
} |
3 つの異なる MIME タイプを生成するために、3 つのリソース・メソッド getClichedMessage()、getXMLMessage()、getHTMLMessage() を追加します。各メソッドに @GET アノテーションを付けます。@GET アノテーションにより、これらのメソッドが HTTP GET
リクエストを処理することを示します。これらの各メソッドの戻り型として、String を指定します。各メソッドに
@PRODUCES アノテーションを付け、各メソッドに対し、それぞれ異なる MIME タイプを指定します。
ここでは、3 つのメソッドに MIME タイプとしてそれぞれ text/plain、text/xml、text/html を指定して、「Hello
Android」という出力を生成します。getXMLMessage メソッドに @Produces ("text/xml") アノテーションを付けると、XML メッセージが生成されます。@GET
アノテーションが付いたメソッドのうち、1 つのメソッドのみをコメント解除します。他にパスを識別するコンポーネントが指定されていない場合、@GET リクエストは @GET
アノテーションが付いたメソッドにルーティングされます。リクエスト URI に一致するメソッドが複数ある場合には、JAX-RS
の選択アルゴリズムを使用してリソース・メソッドが選択されます。例えば、@GET
アノテーションが付いた複数のメソッドそれぞれに異なるパス ID を使用すると、@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;
// The Java class will be hosted at the URI path //"/helloworld"
@Path("/helloworld")
public class HelloWorldResource {
// The Java method will process HTTP GET requests
@GET
// The Java method will produce content identified by the MIME Media
// type "text/plain"
@Produces("text/plain")
public String getClichedMessage() {
// Return some cliched textual content
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> ";
// }
} |
このリソース・クラスを実行すると、異なるタイプの出力が生成されます。テストを実行する際には、それぞれのテストの対象ではないメソッドをコメントアウトし、コメント解除されたメソッドが
1 つのみであるようにします。最初に、出力 MIME タイプとして text/xml
をテストします。まだアプリケーション・サーバーまたは Web サーバーが起動されていない場合には、起動します。リソース・クラスを右クリックし、「Run As
(実行)」 > 「Run on Server (サーバーで実行)」の順に選択します (図 8)。
図 8. リソース・クラスを実行する
web.xml で指定されているように、サーバーで初期パラメーター com.sun.jersey.config.property.resourceConfigClass が com.sun.jersey.api.core.PackagesResourceConfig に初期化され、初期パラメーター com.sun.jersey.config.property.packages が jaxrs に初期化されます。ルート・リソース・クラス jaxrs.HelloWorldResource が検出されます。Jersey アプリケーション v1.4 が初期化され、AndroidJAX-RS モジュールがサーバーにデプロイされます。
このセクションでは、Android 用の JAX-RS クライアントを作成するための Android プロジェクトを作成します。
- Eclipse IDE で「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」の順に選択します。「New (新規)」ダイアログで「Android」 > 「Android Project (Android プロジェクト)」の順に選択し、「Next (次へ)」をクリックします。
- 「New Android Project (新規 Android プロジェクト)」ウィンドウで、図 9 のようにフィールドに値を入力します。
- Project name (プロジェクト名):
AndroidJAXRSClient - Build Target (ビルド・ターゲット): Android Platform 2.2 API 8
- Properties (プロパティー): 「Application name (アプリケーション名)」には「
AndroidJAXRSClient」、「Package name (パッケージ名)」には「android.jaxrs」を入力します。 - 「Create Activity (アクティビティーの作成)」を選択し、アクティビティー・クラスとして「
AndroidJAXRSClient」を指定します。アクティビティーはユーザーとの対話を表し、Activity クラスを継承するクラスが UI 用のウィンドウを作成します。
- Minimum SDK Version (最小 SDK バージョン):
8 - 「Next (次へ)」をクリックします。
図 9. JAX-RS クライアント・クラスを作成する
- Project name (プロジェクト名):
Android プロジェクトの中には以下のファイルがあります。
Activityクラスを継承するアクティビティー・クラス (AndroidJAXRSClient)- Android アプリケーションのレイアウトを指定する res/layout/main.xml ファイル
- AndroidManifest.xml ファイル。このファイルには、パッケージ名、アプリケーションのコンポーネント、プロセス、パーミッション、Android システムの最小 API レベルなど、アプリケーションの構成情報が含まれています。
res/layout/main.xml ファイルの中では、Android UI
コンポーネントのレイアウトを指定します。android:orientation="vertical" を指定することで LinearLayout を作成します。作成する UI コンポーネントには、Web
サービスからのレスポンスがテキスト・メッセージとして表示されるようにします。そのために、jaxrs という ID を持つ TextView 要素を追加することで、get メソッドのうちの 1 つが呼び出された場合に JAX-WS Web サービスから返されるレスポンスが表示されるようにします。その get メソッドが呼び出されるとレスポンスとして Hello メッセージが XML、HTML、テキストのいずれかの形式で返されます。リスト 5 に main.xml ファイルを示します。
リスト 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>
|
Android 機器から JAX-RS Web サービスにアクセスするためには、AndroidManifest.xml の中で android.permission.INTERNET
パーミッションを有効にします。このパーミッションにより、アプリケーションがネットワーク・ソケットを開くことができます。そのためにはリスト 6 の uses-permission 要素を追加します。
リスト 6. INTERNET パーミッションを設定する
<uses-permission android:name="android.permission.INTERNET"></uses-permission> |
uses-sdk 要素を使用して最低限必要な Android バージョンを指定します。AndroidJAXRSClient のアクティビティーとして、intent-filter、action が、activity 要素とそのサブ要素で指定されます。リスト 7 に AndroidManifest.xml ファイルを示します。
リスト 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(Bundle savedInstanceState)
メソッドはアクティビティーが最初に呼び出された時に呼び出されます。リスト 9 のように、setContentView メソッドとレイアウト・リソースを使ってユーザー・インターフェースを定義します。
リスト 9. UI を定義する
setContentView(R.layout.main); |
リスト 10 に TextView オブジェクトという Android ウィジェットの作成方法を示します。このオブジェクトの作成には、main.xml
で定義された、jaxrs という ID を持つ TextView 要素の findViewById メソッドが使われています。
リスト 10. Android ウィジェットを作成する
TextView jaxrs = (TextView) findViewById(R.id.jaxrs); |
HttpClient のデフォルトの実装は DefaultHttpClient です。リスト 11 のように DefaultHttpClient オブジェクトを作成します。
リスト 11. HttpClient を作成する
HttpClient httpclient = new DefaultHttpClient(); |
リスト 12 のように、サーバーから情報を取得するための HttpGet オブジェクトを作成します。URL
としては、URI パス /helloworld 上にホストされているリソースの URL を指定し、localhost ではなくホストの IP アドレスを指定します。クライアントは Android 機器上で実行されますが、JAX-RS Web サービスが実行されるホストは Android 機器の localhost ではありません (ただし JAX-RS Web サービスも Android 機器上にホストされる場合は別ですが、ここで説明している例は、それには該当しません)。
リスト 12. HttpGet オブジェクトを作成する
HttpGet request = new HttpGet("http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld");
|
受け付け可能なメディア・タイプを Accept ヘッダーを使用して指定します。Accept
ヘッダーで設定するメディア・タイプは 1 つのみとし、このメディア・タイプは JAX-RS Web
サービスで生成されるメディア・タイプに対応している必要があります。最初に実行する際に、リスト 13 のように Accept ヘッダーを text/xml に設定すると、レスポンスとして
text/xml が出力されます。
リスト 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 が生成されます。リスト 14 のように、HttpGet オブジェクトを引数として
HttpClient の execute()
メソッドを呼び出し、HttpResponse オブジェクトを取得します。
リスト 14. HttpResponse を取得する
HttpResponse response = httpclient.execute(request); |
getEntity() メソッドを使用して HttpResponse から HttpEntity を取得します (リスト 15)。
リスト 15. HttpEntity を取得する
HttpEntity entity = response.getEntity(); |
getContent() メソッドを使用して HttpGet から InputStream としてコンテンツを取得します (リスト 16)。
リスト 16. HttpEntity から InputStream を作成する
InputStream instream = entity.getContent(); |
JAX-RS Web サービスから返されるメッセージ用に StringBuilder を作成します (リスト 17)。
リスト 17. StringBuilder を作成する
StringBuilder sb = new StringBuilder(); |
InputStream から BufferedReader を作成します (リスト 18)。
リスト 18. BufferedReader を作成する
BufferedReader r = new BufferedReader(new InputStreamReader(instream)); |
BufferedReader から 1 行ずつ読み込み、StringBuilder に追加します (リスト 19)。
リスト 19. BufferedReader を読み込む
for (String line = r.readLine(); line != null; line = r.readLine()) {
sb.append(line);
} |
StringBuilder から String
メッセージを取得し、InputStream を閉じます (リスト 20)
リスト 20. StringBuilder のメッセージを取得する
String jaxrsmessage = sb.toString(); instream.close(); |
その String メッセージを TextView UI コンポーネントに設定します (リスト 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 {
/** Called when the activity is first created. */
@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 アプリケーションのディレクトリー構造
ここまでで、Android クライアントを実行して JAX-RS Web サービスを呼び出し、XML メッセージを出力する準備が整いました。図 11 のように、「AndroidJAXRSClient」プロジェクトを右クリックし、「Run As (実行)」 > 「Android Application (Android アプリケーション)」の順に選択します。
図 11. Android JAX-RS クライアントを実行する

図 12 に示すように、Android AVD が起動し、JAX-RS クライアント・アプリケーションが Android 機器にインストールされます。
図 12. Android JAX-RS クライアントが Android にインストールされる
AndroidJAXRSClient アクティビティーが起動され、JAX-RS Web サービスのリソースによって生成された XML メッセージが Android 機器に出力されます (図 13)。
図 13. Android 機器に出力された XML メッセージ

同様に、text/html メディア・タイプを生成するメソッドがリソース・クラスでコメント解除され、Accept ヘッダーでも text/html メディア・タイプを受信するように設定されると、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 アプリケーションを再度実行すると、図 14 に示すような HTML レスポンスが得られます。
図 14. Android 機器に HTML が出力される
テキスト・レスポンスを取得するためには、リソース・クラスで当該メソッドのコメントを解除します (リスト 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 機器にテキスト・メッセージを出力する
この記事では、JAX-RS Web サービスを作成する方法と、その Web サービスを Android クライアントから呼び出す方法について学びました。また XML、HTML、テキストのいずれかの形式でメッセージを送信して Android 機器に表示する方法を学びました。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Sample code scripts from the article | android-jaxrs-sourcecode.zip | 852KB | HTTP |
学ぶために
- Android: Android アプリケーションを作成するためのツールとドキュメントについて調べてください。
- IBM
JAX-RS: Developer's Guide: JAX-RS アプリケーションのインストール方法についての資料を読んでください。
- JAX-RS
の選択アルゴリズム: JAX-RS の基本について学んでください。
- 「Android の
Spring クライアントを JAX-RS Web サービスに展開する」(Deepak Vohra 著、developerWorks、2011年8月):
Spring Android で作成された REST クライアントを使用して RESTful な Web サービスにアクセスする方法を学んでください。
- developerWorks
に公開された Android 関連コンテンツ: Android に関する記事、デモ、チュートリアルを調べてみてください。
- 著者の
Deepak Vohra が developerWorks に寄稿した他の記事 (2005年4月から現在まで): Android、Ajax、PHP、XML、Web
サービス、Ruby on Rails、EJB、その他の技術が解説されています。
- developerWorks の SOA and web
services ゾーン: 技術記事、チュートリアル、技術標準、その他の技術リソースが豊富に用意されています。
- developerWorks の XML ゾーン:
DTD、スキーマ、XSLT など、XML の領域でのスキルを磨くためのリソースが豊富に用意されています。XML
技術文書一覧に用意された、さまざまな技術記事やヒント、チュートリアル、技術標準、IBM Redbooks を見てください。
- IBM XML certification:
XML および関連技術において IBM 認定技術者になる方法を参照してください。
- developerWorks の Technical events and
webcasts: これらのセッションで最新情報を入手してください。
- developerWorks on Twitter: 今すぐ Twitter に参加して
developerWorks のツイートをフォローしてください。
- developerWorks
podcasts: ソフトウェア開発者のための興味深いインタビューや議論を聞くことができます。
- developerWorks On demand demos:
初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。
製品や技術を入手するために
- Android SDK: Android SDK
をダウンロードし、開発を開始してください。
- Eclipse Downloads: Eclipse for Java EE をダウンロードしてください。
- IBM 製品の評価版: IBM
製品の評価版をダウンロードするか、あるいは IBM SOA
Sandbox のオンライン試用版で、DB2、Lotus、Rational、Tivoli、WebSphere などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。
議論するために
- XML
ゾーンのディスカッション・フォーラム: いくつかのフォーラムで XML 関連の議論が行われています。いずれかのフォーラムで議論に参加してください。
- developerWorks コミュニティー: 開発者向けのブログ、フォーラム、グループ、ウィキなどを利用しながら、他の developerWorks ユーザーとやり取りしてください。