google app エンジン (Java ランタイム上) で興味深い問題が発生しました。アプリ エンジン タスク/ビュー内から、外部 Web サービス API に接続しようとしています。
外部 API は認証に OAuth を使用し、SSL 経由のリクエストのみを受け入れます。私が呼び出している特定のメソッドは POST リクエストです。
オプション 1: AppEngine URLFetch サービスを使用します。ただし、OAuth 署名を行う方法がわかりません。URL フェッチは、署名を排除してリクエストをストリーミングする java.net HttpURLConnection を使用します。私の頼りになる Java OAuth ライブラリはoauth-signpostですが、この理由で java.net をサポートしていません。HttpURLConnection と互換性のある OAuth ライブラリはありますか?
オプション 2:別の URL フェッチ ライブラリを使用します。私のお気に入りの HTTP ライブラリは、apache commons HTTP ライブラリです。ただし、javax.ssl はアプリ エンジン サンドボックスで禁止されているため、SSL を使用すると問題が発生します。SSL 経由で Apache ライブラリを使用しようとすると、次のエラーが発生します。
java.lang.NoClassDefFoundError: javax.net.ssl.KeyManagerFactory is a restricted class. Please see the Google App Engine developer's guide for more details.
at javax.net.ssl.KeyManagerFactory.<clinit>(KeyManagerFactory.java)
at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:223)
ソケットを直接開くことができないためだと思います。
これはすべて、OAuth / POST / SSL / App エンジンの残念な合流点であり、抜け道はまったくありません。あらゆる提案を聞きたい =)