Application Management でコールバックを設定する。
RequestToken
から AccessToken
を取得するさい、正常ルーチンは問題ないが認証ページでユーザがキャンセルした場合に例外が発生する。
GAEのログを確認したところ、
GET /CallBack?denied=XXXXXXXXXXXXX java.lang.NullPointerException at java.net.URLEncoder.encode(URLEncoder.java:205)
となっていた。
Tiwtter4jのソースには、リクエストパラメータの oauth_token
と oauth_verifier
に関する処理しかない。
そのため、そのパラメータが無い場合は、エンコードエラーで例外が発生してしまう。
今まで、SandBoxをラップするAPIを利用してきた中で、NullPointerException
を簡単に吐き出すなんてと経験上まれだったので、何かしら前提条件が必要だと思いソースのすみからすみまで目を通すが、denied
の記述が無い。
しかたが無いので、以下のように処理をする。
if ( req.getParameter("denied") != null ) { // キャンセルされた ; } else { // RequestTokenからAccessTokenを取得 accessToken = twitter.getOAuthAccessToken(requestToken, verifier); }
はまらないようにするためには、経験は捨てろソースに書かれていることがすべてだ。