Saya menggunakan Dropbox API untuk Java versi 1.6 yang dapat ditemukan di sini: https://www.dropbox.com/developers/core/sdks/java
Saya juga menggunakan GWT 2.5.1 di Eclipse 3.7
Saya memiliki kode berikut yang berfungsi ketika dijalankan sebagai Aplikasi 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);
Ini berfungsi dengan baik ketika saya menjalankannya sebagai Aplikasi Java. Namun, ketika saya mencoba melakukan hal serupa dengan GWT dalam RemoteServiceServlet. Saya mendapatkan pengecualian ketika saya mencoba melakukannya
webauth = new DbxWebAuthNoRedirect(requestConfig, appInfo);
Pengecualian yang saya dapatkan adalah sebagai berikut:
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
Saya telah membenturkan kepala ke dinding selama beberapa jam terakhir untuk mencari tahu apa yang sedang terjadi. Saya awalnya ingin menggunakan DbxWebAuth tetapi dokumentasi di API mereka menyertakan instruksi yang memiliki kelas yang tidak ada (saya berasumsi mereka melakukannya pada satu waktu).
Saya merasa DbxWebAuthNoRedirect melakukan sesuatu yang secara dinamis memuat koneksi berdasarkan kelas yang tersedia. Tapi saya belum bisa memahaminya.
Terima kasih sebelumnya atas bantuannya!
EDIT:
Oke, jadi saya melihat sumber API Dropbox dan kesalahan terjadi di sini:
URL urlObject = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) urlObject.openConnection(this.proxy);
Karena saya menggunakan Google App Engine, ia menggunakan objek URL-nya sendiri, bukan yang diimpor oleh App Engine API. Ada ide tentang solusi yang tidak melibatkan penulisan pembungkus GWT untuk API Dropbox.
HttpsURLConnection
seperti yang digunakan oleh api dropbox tidak kompatibel dengan cara kerja mesin aplikasi. Jika Anda tidak mengembangkan mesin aplikasi, Anda perlu menonaktifkan mesin aplikasi. - person Hilbrand Bouwkamp   schedule 25.07.2013https
dan oleh karena itu api dropbox mengharapkan kelas koneksi aman dikembalikan, ia melemparkannya ke kelas itu. Namun GAE hanya mendukunghttp
dan akan mengembalikan konektor http tidak aman yang tidak dapat dialihkan ke kelas koneksi aman. Karena kode sumber api dropbox ada di github, Anda dapat mencoba mengubah kode tersebut menjadi objek yang tidak aman, tetapi saya tidak tahu apakah ini akan berhasil. (Sebagai catatan tambahan, ini bukan masalah GWT, tapi masalah GAE) - person Hilbrand Bouwkamp   schedule 26.07.2013