Я использую API Dropbox для Java версии 1.6, который можно найти здесь: https://www.dropbox.com/developers/core/sdks/java
Я также использую GWT 2.5.1 в Eclipse 3.7.
У меня есть следующий код, который работает при запуске в качестве 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-приложение. Однако, когда я пытаюсь сделать что-то подобное с GWT в RemoteServiceServlet. Я получаю исключение, когда пытаюсь сделать
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 что-то делает, динамически загружая соединение на основе доступных классов. Но я не смог понять это.
Заранее спасибо за помощь!
РЕДАКТИРОВАНИЕ:
Итак, я посмотрел исходный код API Dropbox, и ошибка возникает здесь:
URL urlObject = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) urlObject.openConnection(this.proxy);
Поскольку я использую Google App Engine, он использует свой собственный объект URL, а не объект, импортированный API App Engine. Любые идеи по поводу решения, не связанного с написанием оболочки GWT для API Dropbox.
HttpsURLConnection
, используемый API-интерфейсом Dropbox, несовместим со способом работы механизма приложения. Если вы не разрабатываете движок приложения, вам нужно отключить движок приложения. - person Hilbrand Bouwkamp   schedule 25.07.2013https
, и поэтому API-интерфейс Dropbox ожидает, что будет возвращен класс безопасного соединения, он приводит его к этому классу. Однако GAE поддерживает толькоhttp
и возвращает небезопасный http-коннектор, который нельзя преобразовать в класс безопасного соединения. Поскольку исходный код API Dropbox находится на github, вы можете попробовать изменить код на незащищенный объект, но я не знаю, сработает ли это. (Кстати, это не проблема GWT, а проблема GAE) - person Hilbrand Bouwkamp   schedule 26.07.2013