There's no way Struts2/Freemarker can run on GAE. Have look at http://solveme.wordpress.com/2009/12/25/freemarker-sucks-it-has-dependency-on-javax-swing/
Attila from free marker, has replied there. I have searched for struts/freemarker, there are guyz complaining about the same. Look here http://whyjava.wordpress.com/2009/08/30/creating-struts2-application-on-google-app-engine-gae/ They have posted a patch which wouldn't work in all the cases as javax.swing.TreeNode is referenced at many places. I have reported the issue on Freemarker mailing list as well. Thanks SN Sudhir NimavatSenior software engineer. Quick start global PVT LTD. Baroda - 390007 Gujarat, India Personally I'm always ready to learn, although I do not always like being taught ________________________________ From: Matt Raible <m...@raibledesigns.com> To: "users@appfuse.dev.java.net" <users@appfuse.dev.java.net> Sent: Sat, 26 December, 2009 12:06:58 AM Subject: Re: [appfuse-user] Freemarker sucks I would search the Struts mailing list archives. I believe folks have figured out how to get Struts 2 working on GAE. Matt On Dec 25, 2009, at 8:44 AM, Sudhir N <sudhir_nima...@yahoo.com> wrote: Today tried to deploy a hello world app on GAE and got following > >java.lang.NoClassDefFoundError: javax.swing.tree.TreeNode 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 freemarker.core.TextBlock.isIgnorable(TextBlock.java:375) > at > freemarker.core.TemplateElement.postParseCleanup(TemplateElement.java:240) > at freemarker.core.MixedContent.postParseCleanup(MixedContent.java:76) > at freemarker.core.FMParser.Root(FMParser.java:2961) > at freemarker.template.Template. (Template.java:149) > at > freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:448) > at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:361) > at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:235) > at freemarker.template.Configuration.getTemplate(Configuration.java:487) > at > freemarker.core.Environment.getTemplateForInclusion(Environment.java:1465) > at freemarker.core.Include.accept(Include.java:157) > at freemarker.core.Environment.visit(Environment.java:210) > at freemarker.core.MixedContent.accept(MixedContent.java:92) > at freemarker.core.Environment.visit(Environment.java:210) > at freemarker.core.Environment.process(Environment.java:190) > at freemarker.template.Template.process(Template.java:237) > at > freemarker.ext.servlet.FreemarkerServlet.process(FreemarkerServlet.java:452) > at > freemarker.ext.servlet.FreemarkerServlet.doGet(FreemarkerServlet.java:391) > at > javax.servlet.http.HttpServlet.service(HttpServlet.java:693) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) > at > net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) > at > com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) > at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268) > at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) > at > net.sourceforge.stripes.action.ForwardResolution.execute(ForwardResolution.java:110) > at > net.sourceforge.stripes.controller.DispatcherHelper$7.intercept(DispatcherHelper.java:508) > at > net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158) > at > net.sourceforge.stripes.controller.HttpCacheInterceptor.intercept(HttpCacheInterceptor.java:99) > at > net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) > at > net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113) > at > net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) > at > net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74) > at > net.sourceforge.stripes.controller.DispatcherHelper.executeResolution(DispatcherHelper.java:502) > at > net.sourceforge.stripes.controller.DispatcherServlet.executeResolution(DispatcherServlet.java:286) > at > net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:170) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) > at > net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:51) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:121) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) > at > com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) > at > com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:352) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) > at org.mortbay.jetty.Server.handle(Server.java:313) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) > at > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) > at > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) > at > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) > > >A template engine has dependency on javax.swing !! what could be less >surprising thn this. >BTW Freemarker is quite popular now days :) > > >http://solveme.wordpress.com/2009/12/25/freemarker-sucks-it-has-dependency-on-javax-swing/ > > >Sudhir NimavatSenior software engineer. >Quick start global PVT > LTD. >Baroda - 390007 >Gujarat, India > >Personally I'm always ready to learn, although I do not always like being >taught > > > >________________________________ >The INTERNET now has a personality. YOURS! See your Yahoo! Homepage. The INTERNET now has a personality. YOURS! See your Yahoo! Homepage. http://in.yahoo.com/