2012-12-22 1 views
0

보관 용 파일을 무시하기 위해 Google 애널리틱스에서 Dropbox의 Java API를 사용하려고합니다.Google App Engine에서 드롭 박스 Java API 사용하기

API를 사용하여 파일 덮어 쓰기에 putFileOverwrite API를 사용하고 있지만 액세스 거부 (java.lang.RuntimePermission modifyThreadGroup) 오류가 발생합니다. 나는 GAE에서 멀티 스레딩 프로그래밍이 허용되지 않았기 때문에 AbstractSession.java에서 코드를 업데이트하여 IdleConnectionCloserThread를 일반 클래스가 아닌 스레드로 만들었 기 때문에 생각했습니다.

이제 함수를 실행하려고하면 java.net.Socket 예외가 발생합니다.

Any1에는 Dropbox + GAE 설정을 작동시키는 방법에 대한 제안 사항이 있습니까?

소스 코드 :

AccessType ACCESS_TYPE = AccessType.APP_FOLDER; 
    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
    AccessTokenPair accessTokenPair = new AccessTokenPair(ACCESS_TOKEN, ACCESS_KEY); 
    WebAuthSession session = new WebAuthSession(appKeys, ACCESS_TYPE, accessTokenPair); 

    DropboxAPI<WebAuthSession> dropboxApi = new DropboxAPI<WebAuthSession>(session); 

    String fileContents = "Hello world"; 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(fileContents.getBytes()); 
    try 
    { 
     dropboxApi.putFileOverwrite("/myFile.txt", inputStream, fileContents.length(), null); 
    } 
    catch(DropboxException e) 
    { 
    } 

내가 보관의 항아리를 사용 후 얻을 예외 AS-IS : 다음

java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
at java.security.AccessController.checkPermission(AccessController.java:549) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:289) 
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:314) 
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:299) 
at java.lang.Thread.init(Thread.java:336) 
at java.lang.Thread.<init>(Thread.java:422) 
at com.dropbox.client2.session.AbstractSession$IdleConnectionCloserThread.<init>(AbstractSession.java:507) 
at com.dropbox.client2.session.AbstractSession$IdleConnectionCloserThread.ensureRunning(AbstractSession.java:517) 
at com.dropbox.client2.session.AbstractSession$DBClientConnManager.requestConnection(AbstractSession.java:494) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:383) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 
at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:385) 
at com.dropbox.client2.DropboxAPI$BasicUploadRequest.upload(DropboxAPI.java:1081) 
at com.dropbox.client2.DropboxAPI.putFileOverwrite(DropboxAPI.java:1501) 
at a.b.c.DropboxTestServlet.doGet(DropboxTestServlet.java:33) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

나는 다음을 얻을 IdleConnectionCloserThread이 '스레드'를 상속하지 만들 경우 예외 :

java.net.SocketException: Permission denied: Not allowed to issue a socket connect: permission denied. 
at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:94) 
at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:105) 
at com.google.appengine.api.socket.SocketApiHelper.makeSyncCall(SocketApiHelper.java:71) 
at com.google.appengine.api.socket.AppEngineSocketImpl.connectSocket(AppEngineSocketImpl.java:399) 
at com.google.appengine.api.socket.AppEngineSocketImpl.connectToAddress(AppEngineSocketImpl.java:346) 
at com.google.appengine.api.socket.AppEngineSocketImpl.connect(AppEngineSocketImpl.java:335) 
at java.net.Socket.connect(Socket.java:529) 
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:133) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 
at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:385) 
at com.dropbox.client2.DropboxAPI$BasicUploadRequest.upload(DropboxAPI.java:1081) 
at com.dropbox.client2.DropboxAPI.putFileOverwrite(DropboxAPI.java:1501) 
at a.b.c.DropboxTestServlet.doGet(DropboxTestServlet.java:33) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
+0

GAE는 Java 스레드를 지원합니다 (몇 가지 제한 사항이 있음). https://developers.google.com/appengine/docs/java/runtime#The_Sandbox –

+0

이 예외의 전체 텍스트를 제공해주십시오. 혹시 이클립스에서 보시겠습니까? –

+0

yiu가이 GAE + Dropbox를 작동 시키나요? – MeetM

답변

2

이것은 Dropbox gae에 대한 Google 검색에서 매우 높게 나타납니다. 그래서 비틀 거린 사람들을 위해 : 이 게시물의 java sdk는 HttpsURLConnection의 사용을 HttpURLConnection으로 바꾸면 GAE와 함께 작동합니다. GAE는 https를 자동으로 처리합니다.

+0

Java 용 Dropbox SDK 버전 2.0.5부터 [GoogleAppEngineHttpRequestor] (https://dropbox.github.io/dropbox-sdk-apava/api-docs/v2.0.x/com/dropbox)를 사용할 수 있습니다. /core/http/GoogleAppEngineRequestor.html). App Engine의 URL 가져 오기 API를 명시 적으로 지원합니다. – Greg