java - 具有 GWT 身份验证问题的 Dropbox Java API

标签 java gwt dropbox dropbox-api

我正在使用 1.6 版的 Dropbox API for Java,可在此处找到: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,它使用的是自己的 URL 对象,而不是 App Engine API 导入的对象。关于不涉及为 Dropbox API 编写 GWT 包装器的解决方案的任何想法。

最佳答案

最新的 Dropbox SDK 允许您选择 HttpRequestor 实现

new DbxRequestConfig(APP_NAME, userLocale, HttpRequestor);

所以您需要做的就是调整 com.dropbox.core.http.StandardHttpRequestor 使其对 Appengine 友好

要点:AppengineHttpRequestor.java

关于java - 具有 GWT 身份验证问题的 Dropbox Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866754/

相关文章:

java - 在Transformer中,如何指定被转换的类的类型是相同类型的?

java - 如何使用流修改 List 内的元素并忽略最后一个元素?

javascript - 在 GWT 中使用第三方 javascript 库(带有窗口引用)

gwt - 如何将 OpenLayers 中的 VectorFeatures 或图层的坐标从一种投影转换为另一种投影?

java - 需要java登录代码的帮助

java - 在同一项目中使用内存身份验证和数据库身份验证

gwt - api doc是如何生成的@http ://api. highcharts.com/

excel - 为什么修改密码后excel的内容会发生变化?

android - 使用 Dropbox API 通过 Android 上传文件

ios - 如何在Dropbox iPhone应用程序中集成注销功能?