NetBeans モジュールでの RESTful サービスクライアントの作成
NetBeans IDE 6.9 より、NetBeans モジュールプロジェクトで REST がネイティブサポートされます。そのため、NetBeans モジュールで RESTful クライアントコードを直接生成できるようになります。また、Jersey RESTful クライアントコードを Java またはアプリケーションに挿入できます。
このチュートリアルでは、Twitter What Are You Doing サービスを使用する NetBeans プラットフォームアプリケーションを作成し、Twitter の友達のステータスメッセージ一覧を表示します。最初に、プラットフォームアプリケーションを作成します。このアプリケーションで必要となるライブラリを選択します。次に、NetBeans モジュールを作成します。最後に、RESTful クライアントといくつかの基本的な表示要素をモジュールに追加します。クライアントは、OAuth 認証を使用します。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
プラットフォームアプリケーションの作成
NetBeans プラットフォームアプリケーションには NetBeans IDE ライブラリを追加できます。この節では、プラットフォームアプリケーションを作成し、必要なライブラリを追加します。
モジュールスイートを作成するには、次の手順に従います。
「ファイル」>「新規プロジェクト」(Linux および Windows では Ctrl-Shift-N、MacOS では ⌘-Shift-N) をクリックします。「新規プロジェクト」ウィザードが開きます。
「NetBeans モジュール」カテゴリを選択します。次に、「NetBeans プラットフォームアプリケーションプロジェクト」を選択します。「次へ」をクリックします。
プロジェクトに「RestfulClientPlatformApp」という名前を付けます。プロジェクトの場所を選択します。その他のデフォルト設定を受け入れ、「完了」をクリックします。「プロジェクト」ウィンドウに RestfulClientPlatformApp プロジェクトが表示されます。
「プロジェクト」ウィンドウで「RestfulClientPlatformApp」プロジェクトノードを右クリックし、「プロパティー」を選択します。「プロパティー」ダイアログが開きます。
「プロジェクトプロパティー」ダイアログで「ライブラリ」を選択します。プラットフォームのライブラリだけが表示されます。
「enterprise」ライブラリを展開します。「RESTful Web サービスライブラリ」の「含む」ボックスを選択します。
「解決」ボタンが赤色で強調表示されます。これは、RESTful Web サービスライブラリが、このスイートに含まれていないほかのライブラリに依存しているためです。「解決」ボタンをクリックして、それらのライブラリを含めます。
「了解」をクリックします。プラットフォームアプリケーションで、クライアントモジュールを作成する準備ができました。
クライアントモジュールの作成
Twitter What Are You Doing サービスを使用するためのクライアントとして機能するモジュールは、わずかな手順で作成できます。Twitter サービスは、追加設定なしの状態で NetBeans IDE Web サービスマネージャーに登録されています。別の機能を追加できます。
モジュールを作成してクライアント機能を追加するには、次の手順に従います。
「プロジェクト」ウィンドウで、「RestfulClientPlatformApp」の「モジュール」サブノードを右クリックして「新規を追加...」を選択します。「新規モジュールプロジェクト」ウィザードが開きます。
モジュールに TwitterClientModule という名前を付けます。その他のフィールドはデフォルトの設定を受け入れ、「次へ」をクリックします。「基本モジュール構成」パネルが開きます。
「コード名ベース」に、「org.my.twitter.friends 」など任意の名前を入力します。その他のフィールドはデフォルトの設定を受け入れ、「完了」をクリックします。「プロジェクト」ウィンドウで、TwitterClientModule がプラットフォームアプリケーションの「モジュール」ノードに表示されます。
「TwitterClientModule」ノードを右クリックし、「プロジェクトを開く」を選択します。「TwitterClientModule」ノードが、「プロジェクト」ウィンドウのルートレベルに表示されるようになります。
新しいルートレベルの「TwitterClientModule」ノードを選択します。「新規ファイル」ウィザードを起動します (Ctrl-N/⌘-N、「新規ファイル」アイコン、またはノードのコンテキストメニュー)。
「新規ファイル」ウィザードで、「カテゴリ」で「Web サービス」を、「ファイルの種類」で「RESTful Java クライアント」を選択します。「次へ」をクリックします。「新規 RESTful Java クライアント」パネルが開きます。
クラスに TwitterClient という名前を付け、パッケージに任意の名前を付けるか、以前に作成したコード名ベースを選択します。
「REST リソースを選択」で、「IDE 登録済み」を選択します。「参照」をクリックし、「Twitter」>「Twitter OAuth」>「[statuses]」>「[friends_timeline.{format}]」を表示します。このリソースを選択し、「了解」をクリックします。
注: 追加の Web サービスを IDE に登録できます。「サービス」ウィンドウに移動し、「Web サービス」ノードを右クリックし、「Web サービスを追加」を選択します。ローカルファイルまたは RESTful URL を追加できます。
認証タイプとして「OAuth」が自動的に選択されます。デフォルトをすべて受け入れ、「完了」をクリックします。
警告ダイアログが表示されます。このダイアログで、WADL ファイルの XML スキーマ参照から Java アーティファクトを生成するかどうかを尋ねられます。「はい」をクリックします。
さらに、クラスパスにモジュールを追加することを求める警告が表示されることがあります。「了解」をクリックします。
クラスパスにモジュールを追加する必要がある場合は、「TwitterClientModule」ノードを右クリックして「プロジェクトプロパティー」を開きます。「ライブラリ」セクションに移動し、「依存関係を追加」ボタンでモジュールを追加します。このボタンを押すと、モジュールの依存関係を参照できる一覧が開きます。
TwitterClient クラスが生成され、エディタで開きます。TheTwitterClient クラスは複雑で、次のフィールド、メソッド、および内部クラスを含んでいます。
CONSUMER_KEY : Consumer Key 文字列
CONSUMER_SECRET : Consumer Secret 文字列
initOAuth() : OAuh 初期化のメソッド
getFriendsTimeline() : HTTP メソッドに対応するメソッド: getFriendsTimeline (REST リソースから)
makeOAuthRequestUnique() : 1 つのセッションでの複数の API 呼び出しに有用
login : Twitter アプリケーションへのログインに使用 (認証を強制)。このメソッドは、もう 2 つの生成されたメソッド (getOAuthAccessToken および getOAuthRequestToken ) を呼び出します。
次に、Twitter から OAuth キーを取得して TwitterClient に追加します。
Twitter からの OAuth キーの取得
NetBeans プラットフォームアプリケーションが Twitter のデータにアクセスできるようにするには、確認文字列のほかに CUSTOMER および CUSTOMER_SECRET キーを Twitter から取得する必要があります。Twitter は、これらのキーを必要とする OAuth 認証を使用しています。しかし、OAuth はサーバー上の Web アプリケーションによって呼び出される前提で設定されています。認証キーを取得するために、「仮の」Web アプリケーションを登録します。
Twitter から OAuth キーを取得するには:
ブラウザを開きます。「Twitter」>「アプリケーション」 ページに移動し、「新しいアプリケーションを追加 」をクリックします。Twitter アカウントにログインしている必要があります。複数のアカウントを持っている場合は、正しいアカウントにログインしていることを確認してください。
「アプリケーション名 」テキストフィールドに「NB Platform Friends Application 」と入力します。
「アプリケーションの説明 」フィールドに説明を入力します。これは必須です。「friends_timeline 操作を呼び出す NetBeans プラットフォームアプリケーション」などのように入力できます。
「アプリケーションのウェブサイトURL 」フィールドに任意の URL を入力します。
「アプリケーションの種類 」オプションで「クライアントアプリケーション」ラジオボタンを選択します。
「標準のアクセスタイプ 」オプションで、「読み取りおよび書き込み」のラジオボタンを選択します。
ほかのオプションをデフォルトのままにして「保存する」を押します。登録したアプリケーションの詳細が記載されたブラウザページが開きます。重要な詳細情報は Consumer key および Consumer secret です。
ブラウザから Consumer key をコピーします。IDE で、CONSUMER_KEY が設定されている行を見つけます。引用符の間に Consumer key の値をペーストします。
Consumer secret key をブラウザから TwitterClient にコピー&ペーストします。変更を保存します。
ウィンドウのデザイン
プロジェクトを完成させるために、ウィンドウを追加します。このウィンドウに UI コンポーネントを実装し、ボタンをクリックすると友達のステータス一覧が表示されるといったアクションを追加します。
ウィンドウをデザインするには、次の手順に従います。
「プロジェクト」ウィンドウで、モジュールのノードを右クリックし、「新規」>「ウィンドウ」を選択します。「新規ウィンドウ」ウィザードが開き、「基本設定」パネルが表示されます。
「基本設定」パネルの「ウィンドウの位置」で「editor 」を選択し、「アプリケーションの起動時に開く」を選択して、「次へ」をクリックします。「名前、アイコン、および場所」パネルが開きます。
「クラス名の接頭辞」フィールドに「twitterFriendsStatus 」と入力します。「org.my.twitter.friends 」パッケージを選択します。「完了」をクリックします。
twitterFriendsStatusTopComponent ファイルが「デザイン」ビューに開きます。右側に Swing の UI コンポーネントのパレットが表示されます。
次の GUI 要素をデザイン領域にドラッグします。
ボタン
Get Friends' Statuses
変数名を getStatusesButton に変更します。
「enabled」プロパティーを選択解除します。
ボタン
Log in
変数名を loginButton に変更します
スクロール区画
--
テキスト領域
--
スクロール区画にドラッグします
必要に応じて、テキスト領域とスクロール区画のサイズを変更し、ボタンの位置を調整します。
ログインボタンをダブルクリックします。IDE によってボタンのアクションメソッドが生成され、エディタが「ソース」ビューに切り替わってそのアクションメソッドにフォーカスされます。
ログインボタンのアクションメソッドの本体に、次のコードを入力するかコピーします。このコードは、アプリケーションを Twitter にログインさせるメソッドを起動します。getStatuses ボタンが有効になり、ログインボタンが無効になります。アプリケーションがログインする必要があるのは一度だけです。TwitterClient は、その login メソッドを呼び出すためにインスタンス化する必要はありません。
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {
TwitterClient.login();
getStatusesButton.setEnabled(true);
loginButton.setEnabled(false);
}
getStatuses ボタンをダブルクリックします。IDE によってボタンのアクションメソッドが生成され、エディタが「ソース」ビューに切り替わってそのアクションメソッドにフォーカスされます。
getStatuses ボタンのアクションメソッドの本体に、次の処理コードをペーストするか入力します。このコードは、login メソッドによって作成されたトークンを使用して、TwitterClient のインスタンス化および OAuth の初期化を行います。そのあとコードは getFriendsTimeline を呼び出し、ステータスの一覧を取得して、各ステータスのユーザー名およびテキストを含む行を String に追加したあと、String をテキスト領域に渡します。
private void getStatusesButtonActionPerformed(java.awt.event.ActionEvent evt) { TwitterClient client = new TwitterClient("xml"); client.initOAuth(); Statuses response = client.getFriendsTimeline(Statuses.class, null, null, null, "10"); response.getStatus().size(); String text = ""; for (StatusType st : response.getStatus()) { text += st.getUser().getName() + ": " + st.getText() + "\n"; } jTextArea1.setText(text); }
クラスが見つからないことを示す警告アイコンがコードに表示されます。Ctrl-Shift-I (Mac の場合は ⌘-Shift-I) を押します。「すべてのインポートを修正」ダイアログが開きます。twitter.twitteroauth.twitterresponse クラスを選択します。「了解」をクリックします。
これでアプリケーションは完成しました。RestfulClientPlatformApp を実行すると、NetBeans プラットフォームが開き、デザインしたウィンドウが「出力」セクションに表示されます。「Log In」をクリックするとダイアログが開き、アプリケーションによるデータアクセスを認証するためのリンクが表示されます。
リンクをクリックするとブラウザページが開き、アプリケーションによる Twitter データへのアクセスを許可するかどうかが Twitter によって確認されます。「許可する」をクリックすると、ページが更新されて PIN が表示されます。PIN をコピーし、認証ダイアログのベリファイア文字列フィールドにペーストします。「了解」をクリックします。
「Log In」ボタンが無効になり、「Get Friends' Statuses」ボタンが有効になります。「Get Friends' Statuses」をクリックすると、Twitter の友達の最新のステータスメッセージ一覧が表示されます。
その他の課題
有益なアイデアをいくつか紹介します。
friends_timeline API のほかのメソッドを使用して、もう 1 つのウィンドウをモジュールに追加します。
別の Twitter リソースを使用して、もう 1 つのモジュールをプロジェクトに追加します。
「新規プロジェクト」>「サンプル」>「NetBeans モジュール」で「Facebook モジュールのサンプル」を開いて学習します。
関連項目
NetBeans IDE を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリングリスト に登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。
dev
@
platform.netbeans.org
メーリングリストに登録 することによって、NetBeans プラットフォームでの RCP アプリケーション開発に関して、ご意見やご提案を送信したり、サポートを受けたり、情報を入手したりできます。