Fernando,
   There's nothing specific about the generic tapestry form. If you look at
the stacktrace, the problem comes from Commons Fileupload trying to use a
temp file to store the file upload. There is a version of Commons Fileupload
that is GAE friendly, google it and you'll be able to get it working.

Cheers,

Alex K

On Mon, Apr 4, 2011 at 6:03 PM, Fernando Benjamin <
fernandobenja...@gmail.com> wrote:

> Hi all,
>
>
> I need some help on using tapestry's form component on GAE.
> I am uploading a file & a beaneditor with a tapestry form component.
>
> The problem is that when the file gets uploaded to GAE, I get an exception.
> This exception occurs because, tapestry wants to create the file for me.
>
> Is there a way of avoiding this automatic creation of file after uploading
> the form?
> GAE does not allow to create files!
> And I must use the tapestry component form :)
>
>
> Thanks,
>
> Fernando
>
> --------------------------------------- EXCEPTION
> ---------------------------------------
>
> jjava.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted
> class. Please see the Google  App Engine developer's guide for more
> details.
>
>    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(
> Runtime.java:51)
>
> at org.apache.commons.fileupload.disk.DiskFileItem.<clinit>(
> DiskFileItem.java:109)
>
> at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(
> DiskFileItemFactory.java:199)
>
> at
> $FileItemFactory_12f226be4b1.createItem($FileItemFactory_12f226be4b1.java)
>
> at org.apache.commons.fileupload.FileUploadBase.parseRequest(
> FileUploadBase.java:361)
>
> at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(
> ServletFileUpload.java:126)
>
> at
>
> org.apache.tapestry5.upload.internal.services.MultipartDecoderImpl.parseRequest(
> MultipartDecoderImpl.java:106)
>
> at
> org.apache.tapestry5.upload.internal.services.MultipartDecoderImpl.decode(
> MultipartDecoderImpl.java:88)
>
> at $MultipartDecoder_12f226be4b0.decode($MultipartDecoder_12f226be4b0.java)
>
> at $MultipartDecoder_12f226be329.decode($MultipartDecoder_12f226be329.java)
>
> at
>
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(
> MultipartServletRequestFilter.java:41)
>
> at
>
> $HttpServletRequestHandler_12f226be32e.service($HttpServletRequestHandler_12f226be32e.java)
>
> at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(
> IgnoredPathsFilter.java:62)
>
> at
>
> $HttpServletRequestFilter_12f226be32b.service($HttpServletRequestFilter_12f226be32b.java)
>
> at
>
> $HttpServletRequestHandler_12f226be32e.service($HttpServletRequestHandler_12f226be32e.java)
>
> at org.apache.tapestry5.services.TapestryModule$2.service(
> TapestryModule.java:926)
>
> at
>
> $HttpServletRequestHandler_12f226be32e.service($HttpServletRequestHandler_12f226be32e.java)
>
> at
>
> $HttpServletRequestHandler_12f226be328.service($HttpServletRequestHandler_12f226be328.java)
>
> at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147)
>
> at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1157)
>
> at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(
> ServeBlobFilter.java:58)
>
> 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:122)
>
> 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.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(
> DevAppEngineWebAppContext.java:70)
>
> at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>
> at
>
> com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(
> JettyContainerService.java:351)
>
> 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.content(
> HttpConnection.java:938)
>
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
>
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>
> 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)
>
>
> ------------------------------------------------------------------------------------------
>
>
>
> --------------------------------------- MY FORM
> ---------------------------------------
>
>
>     <t:form t:id="upload" >
>
>        <t:errors/>
>
>        <t:beaneditor t:id="product" object="product" />
>
>        <br/><br/>
>
>        <input type="file" id="ga" name="file"/>
>
>
>        <br/><br/>
>
>        <input t:type="submit" t:id="button" t:value="message:button-label"
> />
>
>
>
>    </t:form>
>
>
> ----------------------------------------------------------------------------------------
>
>
>
>
>
>
> Here is my example of the Filter
>
> --------------------------------------- MY FILTER
> ---------------------------------------
>
>
>   @Override
>
> public boolean service(Request request, Response response, RequestHandler
> handler) throws IOException {
>
>  log.info("PATH = " + request.getPath());
>
>  if (urlPath.equalsIgnoreCase(request.getPath())) {
>
>  try {
>
>  ServletFileUpload upload = new ServletFileUpload();
>
>  FileItemIterator iterator = upload.getItemIterator(reqServlet);
>
>  FileItemStream item = iterator.next();
>
>  InputStream stream = item.openStream();
>
>  String filename = item.getName();
>
>  Blob content = new Blob(IOUtils.toByteArray(stream));
>
>  log.debug("Filename " + filename.substring(filename.length() - 3,
> filename.length()));
>
>                                 [* .... more functionality for saving
> tefile
> *!.....]
>
>  } catch (Exception ex) {
>
>  log.error(ex.getMessage());
>
>  }
>
>
>  log.info("################# EINDE ############");
>
>  }
>
>  return handler.service(request, response);
>
> }
>
> }
>

Reply via email to