Upload Doc from Google App Engine using ResumableHttpFileUploader failing

111 views
Skip to first unread message

David Hodge

unread,
Mar 13, 2012, 6:12:18 PM3/13/12
to google-docum...@googlegroups.com
I was trying to upload a file from GAE to Google Docs with the ResumableHttpFileUploader and setData method instead of setFile method because of the GAE limitation writing files and I get security related error.  Anyone know why? or if there is a work around?


  FileUploadProgressListener listener = new FileUploadProgressListener();

        ExecutorService executor = Executors.newFixedThreadPool(MAX_CONCURRENT_UPLOADS);

   ResumableHttpFileUploader.Builder builder =   new ResumableHttpFileUploader.Builder();
builder.setExecutorService(executor);
builder.setChunkSize(DEFAULT_CHUNK_SIZE);
builder.setProgressListener(listener);
builder.setUrl(uri);
com.google.gdata.client.uploader.ByteArrayUploadData uploadData =
new com.google.gdata.client.uploader.ByteArrayUploadData(file.getBytes("UTF-8"));
builder.setData(uploadData);
    
        ResumableHttpFileUploader uploader = builder.build();

        listener.listenTo(uploader);

        uploader.start();

        // wait for uploads to complete
        while (!listener.isDone()) {
          try {
            Thread.sleep(100);
          } catch (InterruptedException ie) {
             listener.printResults();
            throw ie; // rethrow
          }
        }

        // print upload results
        listener.printResults();
---

I get the following stack trace:

 java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup)
     [java] at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
     [java] at java.security.AccessController.checkPermission(AccessController.java:546)
     [java] at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
     [java] at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166)
     [java] at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:191)
     [java] at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:299)
     [java] at java.lang.Thread.init(Thread.java:336)
     [java] at java.lang.Thread.<init>(Thread.java:422)
     [java] at java.util.TimerThread.<init>(Timer.java:456)
     [java] at java.util.Timer.<init>(Timer.java:71)
     [java] at java.util.Timer.<init>(Timer.java:106)
     [java] at com.google.gdata.client.uploader.ResumableHttpFileUploader.upload(ResumableHttpFileUploader.java:738)
     [java] at com.google.gdata.client.uploader.ResumableHttpFileUploader.start(ResumableHttpFileUploader.java:624)

Ali Afshar

unread,
Mar 13, 2012, 10:49:11 PM3/13/12
to google-docum...@googlegroups.com
Hi David,

The Java resumable uploader won't work on App Engine for two reasons:

1. Lack of thread support
2. Lack of file support

I wrote an example of how to perform the same task on App Engine here:


It doesn't cover some edge cases but it is a pretty good place to start from if you need the functionality. Please let me know or make an issue if you have problems with it.

Regards
--
Ali Afshar | www.googplus.org/ali | Google Developer Relations

David Hodge

unread,
Mar 15, 2012, 2:13:20 AM3/15/12
to google-docum...@googlegroups.com
Thanks for the reply.  I may give it a try.

David Yuctan Hodge, Partner
Lucid Technics, LLC - Think Clearly. Think Lucid.
www.lucidtechnics.com
Phone 703.942.9848
Fax 703.563.6279
Reply all
Reply to author
Forward
0 new messages