RestでForce.comのデータにServletからアクセスするテスト
このページのサンプルコードで動かしてみる。
まずはTomcat環境の構築です!
はじめに概略整理しましょう。
このサンプル例では
- Tomcat上のServletからForce.comへアクセス
- Http送信にはApacheのHttpClientライブラリを使用
- Oauth認証後、Force.com内のデータにアクセス
- Json形式のデータをJavaのJsonライブラリを使用して取得
ということをやっていますね。
このページの例はServlet仕様3.0のコードなので、
Tomcat7を使用しろとのこと。
コードを書き直せばそれ以下バージョンでもいいのでしょうが、
せっかくなのでTomcat7を環境構築する。
Tomcat7はこちらからダウンロードする。
今回Windows環境ですのでzipを落とします。
おっとTomcatプラグインのTomcat7対応版を
ここから落として入れておきましょうね。
↓こうして設定できましたでしょうか?
次にTomcatでSSL設定する必要があります。
8443ポートでアクセスできるようにします。
jdkのインストール先にあるkeytoolというコマンドを叩いて、
keyを作成します。
詳細はこちら
keyはデフォルトで%HOMEPATH%の下に.keystoreという名前でできます。
作成先を指定するにはパラメータ"-keystore"を使用。
↓%CATALINA_HOME%\conf\server.xml
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystorePass="changeit"
keystoreFile="C:/Documents and Settings/ユーザ名/.keystore" />
-->
ここのコネクタ部分のコメントを外してkeystorePassとkeystoreFileを指定。
ここでkeystorePassはデフォルトのchangeitのまま
キーを作成しています。
そしたらTomcatを起動して8443ポートでアクセスしてみよう。
とりあえず このまま続行をクリック。
次にEclipseのJavaプロジェクトの作成です!
次にサンプルコードをダウンロードして、
EclipseのJavaプロジェクトに入れときます。
サンプルコードは日本チームさん
が用意してくれたものを使用することとする。
ただしindex.htmlは用意されていないので、
もとのソースを使用する。
あといちいちダウンロード面倒なので、
ここ「library1.zip」をダウンロード
と
ここ「library2.zip」をダウンロード
に必要なライブラリ置いとくので、
クラスパスに通してください。
↓そうするとこんな感じです。
jsonのライブラリはサンプルページのjson.orgからたどって、
必要ファイルをソースのままダウンロードしました。
jarとかになっているのですか?
私は恥ずかしながら知らなかったのですが、servlet3.0仕様からは
web.xmlなくてもアノテーションだけでよいのですね。
続いてForce.comにリモートサイトを登録します。
自分のTomcatの場所をリモートサイトとして登録します。
↓設定 >> アプリケーションの設定 >> 開発 >> リモードアクセス
から自分のTomcatの場所を指定し、
コンシューマ鍵とコンシューマの秘密を
OAuthServletの@WebInitParamアノテーションに指定する。
※ちなみに、設定 >> 管理者設定 >> セキュリティーのコントロール >> リモートサイトの登録
はSalesforce.com から呼び出すことのできる Web アドレスですので、
今回のTomcat側が行うことをSalesforceから行う場合の設定ですので、
別ものですのでよろしくお願いします。
こちらの機能を使ってYahooAPIにRESTでアクセスしたりする、
実践的研修 Force.com研修 アドバンス編はこちらからどうぞ。
サンプルプログラムを動かす
話し戻ってhttps://localhost:8443/RestTest/にアクセスすると。
コンテキスト直下のindex.htmlが開きます。
これはServletの仕様。
index.html
DHMLでリンクを作成していますね。
このリンクをクリックすると
あとはサンプルページの説明通り、
Servletをデバッグすれば、概要をつかむことが可能です。
ただ、DemoRestのshowAccounts()
private void showAccounts(String instanceUrl, String accessToken,
PrintWriter writer) throws ServletException, IOException {
HttpClient httpclient = new DefaultHttpClient();
// set the SOQL as a query param
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("q",
"SELECT Name, Id from Account LIMIT 100"));
HttpGet get = new HttpGet(instanceUrl + "/services/data/v21.0/query?"
+ URLEncodedUtils.format(params, "UTF-8"));
// set the token in the header
get.addHeader("Authorization", "OAuth " + accessToken);
HttpResponse getResponse = httpclient.execute(get);
if (getResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// Now lets use the standard java json classes to work with the
// results
try {
JSONObject response = new JSONObject(new JSONTokener(
EntityUtils.toString(getResponse.getEntity(), "UTF-8")));
System.out.println("Query response: " + response.toString(2));
writer.write(response.getLong("totalSize")
+ " record(s) returned\n\n");
JSONArray results = response.getJSONArray("records");
for (int i = 0; i < results.length(); i++) {
writer.write(results.getJSONObject(i).getString("Id")
+ ", " + results.getJSONObject(i).getString("Name")
+ "\n");
}
writer.write("\n");
} catch (JSONException e) {
e.printStackTrace();
throw new ServletException(e);
}
}
}
ここのresponse.getString("totalSize")は
getLong("totalSize")にしないと落ちました。
サンプルではshowAccounts以外にもいろいろやってますが、
今回とりあえず
showAccountsのみ試してみました。
↓showAccountsのもどりはこんな感じになります。
- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * -
ネットのパワーを不動産業へ生かす!
不動産業向け顧客管理・営業支援システム 顧きゃく録!
- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
« ApexのメソッドにSOAPでアクセスしてみるテスト | トップページ | Apex Transientキーワード »
「Force.com」カテゴリの記事
- Reports Connect for Salesforce ユーザー外字、IPAmjフォントの使用法(2012.11.05)
- Reports Connect for Salesforce: json型式のパラメーターによるsubreportの作成方法 (2017.07.05)
- Reports Connect for Salesforce / for kintone QRコードの出力(2014.09.24)
- Reports Connect for Salesforce Salesforce1アプリへの組み込み その1(2014.03.06)
- Reports Connect for Salesforce Salesforce1アプリへの組み込み その2(2014.03.06)
「Salesforce」カテゴリの記事
- Reports Connect for Salesforce ユーザー外字、IPAmjフォントの使用法(2012.11.05)
- Reports Connect for Salesforce: json型式のパラメーターによるsubreportの作成方法 (2017.07.05)
- Reports Connect for Salesforce / for kintoneグラフの出力(2015.10.28)
- Reports Connect for Salesforce / for kintone QRコードの出力(2014.09.24)
- Reports Connect for Salesforce Salesforce1アプリへの組み込み その1(2014.03.06)
トラックバック
この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1482716/40152427
この記事へのトラックバック一覧です: RestでForce.comのデータにServletからアクセスするテスト:
« ApexのメソッドにSOAPでアクセスしてみるテスト | トップページ | Apex Transientキーワード »
コメント