logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« ApexのメソッドにSOAPでアクセスしてみるテスト | トップページ | Apex Transientキーワード »

RestでForce.comのデータにServletからアクセスするテスト

このページのサンプルコードで動かしてみる。

まずはTomcat環境の構築です!

はじめに概略整理しましょう。
このサンプル例では

  1. Tomcat上のServletからForce.comへアクセス
  2. Http送信にはApacheのHttpClientライブラリを使用
  3. Oauth認証後、Force.com内のデータにアクセス
  4. Json形式のデータをJavaのJsonライブラリを使用して取得

ということをやっていますね。
このページの例はServlet仕様3.0のコードなので、
Tomcat7を使用しろとのこと。
コードを書き直せばそれ以下バージョンでもいいのでしょうが、
せっかくなのでTomcat7を環境構築する。

Tomcat7はこちらからダウンロードする。
今回Windows環境ですのでzipを落とします。

おっとTomcatプラグインのTomcat7対応版を
ここから落として入れておきましょうね。

↓こうして設定できましたでしょうか?

Ws000005

次に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ポートでアクセスしてみよう。

↓chromeでアクセス
Ws000006

とりあえず このまま続行をクリック。

こんな感じのURLに
Ws000007

 

おおっTomcat7から画面ずいぶん変わったなー
Ws000008



次にEclipseのJavaプロジェクトの作成です!

次にサンプルコードをダウンロードして、
EclipseのJavaプロジェクトに入れときます。
サンプルコードは日本チームさん
が用意してくれたものを使用することとする。

ただしindex.htmlは用意されていないので、
もとのソースを使用する。

あといちいちダウンロード面倒なので、
ここ「library1.zip」をダウンロード
ここ「library2.zip」をダウンロード
に必要なライブラリ置いとくので、
クラスパスに通してください。

↓そうするとこんな感じです。

Ws000010

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

Ws000011

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のもどりはこんな感じになります。

Ws000012

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * -
     ネットのパワーを不動産業へ生かす!
     不動産業向け顧客管理・営業支援システム  顧きゃく録!
- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *

« ApexのメソッドにSOAPでアクセスしてみるテスト | トップページ | Apex Transientキーワード »

Force.com」カテゴリの記事

Salesforce」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1482716/40152427

この記事へのトラックバック一覧です: RestでForce.comのデータにServletからアクセスするテスト:

« ApexのメソッドにSOAPでアクセスしてみるテスト | トップページ | Apex Transientキーワード »