2

ここにある Dropbox API for Java のバージョン 1.6 を使用しています: https://www.dropbox.com/developers/core/sdks/java

私はEclipse 3.7でGWT 2.5.1も使用しています

Java アプリケーションとして実行すると機能する次のコードがあります。

    DbxRequestConfig requestConfig = new DbxRequestConfig(type, locale);
    DbxAppInfo appInfo = new DbxAppInfo(APP_ID, APP_SECRET);
    DbxWebAuthNoRedirect webauth = new DbxWebAuthNoRedirect(requestConfig, appInfo);
    String result = webauth.start();
    System.out.println(result);
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String code = reader.readLine();

    webauth = new DbxWebAuthNoRedirect(requestConfig, appInfo);
    DbxAuthFinish finish = webauth.finish(code);

    DbxClient client = new DbxClient(requestConfig, finish.accessToken);
    DbxAccountInfo info = client.getAccountInfo();
    long total = info.quota.total;
    long used = info.quota.normal;

    System.out.println("total: " + total);
    System.out.println("used: " + used);

これは、Java アプリケーションとして実行すると問題なく動作します。ただし、RemoteServiceServlet 内で GWT と同様のことをしようとすると。しようとすると例外が発生します

webauth = new DbxWebAuthNoRedirect(requestConfig, appInfo);

私が得ている例外は次のとおりです。

Caused by: java.lang.ClassCastException: com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection cannot be cast to javax.net.ssl.HttpsURLConnection
at com.dropbox.core.http.StandardHttpRequestor.prepRequest(StandardHttpRequestor.java:160)
at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:87)
at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:21)
at com.dropbox.core.DbxRequestUtil.startPostNoAuth(DbxRequestUtil.java:156)
at com.dropbox.core.DbxRequestUtil.doPostNoAuth(DbxRequestUtil.java:289)
at com.dropbox.core.DbxWebAuthHelper.finish(DbxWebAuthHelper.java:40)
at com.dropbox.core.DbxWebAuthNoRedirect.finish(DbxWebAuthNoRedirect.java:84)
at com.cloudshare.server.DropboxPlayground.getFinish(DropboxPlayground.java:21)
at com.cloudshare.server.DropboxServiceImpl.authenticate(DropboxServiceImpl.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
... 40 more

何が起こっているのかを理解しようとして、ここ数時間頭を壁にぶつけていました。私はもともと DbxWebAuth を使用したかったのですが、その API のドキュメントには、存在しないクラスを持つ命令が含まれています (かつては存在していたと思います)。

DbxWebAuthNoRedirect は、利用可能なクラスに基づいて接続を動的にロードしているような気がします。しかし、私はそれを理解することができませんでした。

助けてくれてありがとう!

編集:

よし、Dropbox API ソースを調べたところ、ここでエラーが発生しています。

    URL urlObject = new URL(url);
    HttpsURLConnection conn = (HttpsURLConnection) urlObject.openConnection(this.proxy);

私は Google App Engine を使用しているため、App Engine API によってインポートされたものではなく、独自の URL オブジェクトを使用しています。Dropbox API の GWT ラッパーの作成を伴わないソリューションに関するアイデア。

4

5 に答える 5

1
DbxAppInfo appInfo = new DbxAppInfo(APP_KEY, APP_SECRET);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("107.108.85.10", 80));

StandardHttpRequestor requ = new StandardHttpRequestor(proxy);
DbxRequestConfig config = new DbxRequestConfig("JavaTutorial/1.0",
Locale.getDefault().toString(),requ);
DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo);

したがって、Proxy(私のファイアウォール)StandardHttpRequestorを使用し、このリクエスターを使用することで、うまくいきましDbxRequestConfigた。

于 2013-10-31T06:44:19.487 に答える
1

安全なhttps://URL を使用して接続しましたか? 私の推測では、を使用するhttp://と、安全な接続にキャストできない安全でないコネクタが得られます。

- 編集 -

HttpsURLConnectionクラスが GAE でサポートされていないように見えるため、GAE のドキュメントとは異なり、動作しません。HttpsURLConnection の使用 (ドキュメントの問題)。これは、おそらくそれを直接使用するルークが不足していることを意味します。

于 2013-07-25T20:07:06.767 に答える
0

私も同じ問題に直面しました。この投稿によると、https://groups.google.com/forum/#!topic/google-appengine-java/V8pREOXPX24

com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler 
$Connection extends the class java.net.HttpURLConnection

したがって、クラスを置き換えました

javax.net.ssl.HttpsURLConnection

java.net.HttpURLConnection 

クラス com.dropbox.core.http.StandardHttpRequestor で Dropbox Java SDK を再構築します。その正常に動作します。サンプルの動作するアプリはhttps://gwt-gae-testing.appspot.com/にあります。

于 2013-08-24T05:46:00.457 に答える