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