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); } }