1

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 エンジンの残念な合流点であり、抜け道はまったくありません。あらゆる提案を聞きたい =)

4

1 に答える 1

1
  1. google-oauth-java-client

  2. UrlFetch をラップするカスタム ConnectionManager を使用する場合、HttpClient は AppEngine で動作するはずです。詳細はこちらこちら

于 2012-06-01T04:53:03.967 に答える