[ 
https://issues.apache.org/struts/browse/WW-3114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=46223#action_46223
 ] 

Kent R. Spillner commented on WW-3114:
--------------------------------------

Would this patch affect default actionless results for directories?

For example, assuming the following two .jsp files without any corresponding 
Action:

WEB-INF/content/index.jsp
WEB-INF/content/foo/index.jsp

The Convention plugin should create actionless results identified by the URLs:

http://id.appspot.com/
http://id.appspot.com/foo
http://id.appspot.com/foo/

... that render the corresponding .jsp file in response to requests to those 
URLs.  But when deployed to Google AppEngine, the response to requests to those 
URLs is the raw source of the .jsp files served with content-type plain/text.

Everything works fine for the case where the .jsp file is not named index.jsp 
(i.e. with .jsp file WEB-INF/content/bar.jsp without any corresponding Action, 
requests to the URL http://id.appspot.com/bar correctly render the .jsp file, 
and the result is served with content-type text/html).

> Work around getSystemClassloader call for compatibility with GAE
> ----------------------------------------------------------------
>
>                 Key: WW-3114
>                 URL: https://issues.apache.org/struts/browse/WW-3114
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Convention
>    Affects Versions: 2.1.7
>            Reporter: Leonard Broman
>            Assignee: Wes Wannemacher
>             Fix For: 2.1.7
>
>         Attachments: gae-patch.txt
>
>
> The Google App Engine sandbox does not allow application to access the system 
> classloader using the ClassLoader.getSystemClassLoader() accessor. The 
> convention plugin uses this to exclude urls to scan in 
> PackageBasedActionConfigBuilder.java. 
> Due to this, convention plugin is not functioning properly in the GAE sandbox.
> Stacktrace from app engine:
> com.opensymphony.xwork2.util.logging.jdk.JdkLogger error: Unable to scan 
> named packages
> java.security.AccessControlException: access denied 
> (java.lang.RuntimePermission getClassLoader)
>       at java.security.AccessControlContext.checkPermission(Unknown Source)
>       at java.security.AccessController.checkPermission(Unknown Source)
>       at java.lang.SecurityManager.checkPermission(Unknown Source)
>       at java.lang.ClassLoader.getSystemClassLoader(Unknown Source)
>       at 
> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildUrlSet(PackageBasedActionConfigBuilder.java:324)
>       at 
> org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:295)
>       at 
> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:277)
>       at 
> org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)
>       at 
> com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:200)
>       at 
> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
>       at 
> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
>       at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
>       at 
> org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
>       at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
>       at 
> org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:589)
>       at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
>       at 
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
>       at 
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
>       at 
> org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
>       at 
> com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:190)
>       at 
> com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:167)
>       at 
> com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:113)
>       at 
> com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)
>       at 
> com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4547)
>       at 
> com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4545)
>       at 
> com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
>       at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)
>       at com.google.net.rpc.impl.Server$2.run(Server.java:792)
>       at 
> com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
>       at 
> com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:489)
>       at com.google.net.rpc.impl.Server.startRpc(Server.java:748)
>       at com.google.net.rpc.impl.Server.processRequest(Server.java:340)
>       at 
> com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:422)
>       at 
> com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
>       at 
> com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
>       at com.google.net.async.Connection.handleReadEvent(Connection.java:419)
>       at 
> com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:733)
>       at 
> com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
>       at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
>       at 
> com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:249)
>       at 
> com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:373)
>       at java.lang.Thread.run(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to