Hi,
I have groovy script that read an image from a Blob field, and write
it to the response. It runs well on my local environment, but causes
java.security.AccessControlException on the google app engine.
Any idea why it happened and how to fix it?
The script (image.groovy) looks like this:
import com.google.appengine.api.datastore.*
import com.google.appengine.api.images.*
def k = KeyFactory.stringToKey( params.key )
def img = datastore.get(k).content.getBytes();
if ( img ){
def width = params.width;
def height = params.height;
if ( width && height ){
Image oldImage = ImagesServiceFactory.makeImage(img);
Transform resize =
ImagesServiceFactory.makeResize(width.toInteger(),
height.toInteger());
Image newImage = images.applyTransform(resize,
oldImage);
img = newImage.getImageData();
}
response.getOutputStream().write(img)
}else{
println "failed to find img"
}
And the error:
04-07 08:44PM 14.540 GroovyServlet Error: script: '/image.groovy':
Script processing failed.access denied (java.lang.Runti
04-07 08:44PM 14.540 java.security.AccessControlException: access
denied (java.lang.RuntimePermission getClassLoader)
04-07 08:44PM 14.540 at
com.google.appengine.runtime.Request.process-7950a73f1237deb5(Request.java)
04-07 08:44PM 14.540 at
org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.<init>(ClassLoaderForClassArtifacts.jav
04-07 08:44PM 14.540 at
org.codehaus.groovy.runtime.callsite.CallSiteClassLoader.<init>(CallSiteClassLoader.java:
40)
04-07 08:44PM 14.541 at org.codehaus.groovy.reflection.CachedClass
$5$1.run(CachedClass.java:144)
04-07 08:44PM 14.541 at org.codehaus.groovy.reflection.CachedClass
$5$1.run(CachedClass.java:142)
04-07 08:44PM 14.541 at
java.security.AccessController.doPrivileged(AccessController.java:34)
04-07 08:44PM 14.541 at org.codehaus.groovy.reflection.CachedClass
$5.initValue(CachedClass.java:141)
04-07 08:44PM 14.541 at org.codehaus.groovy.reflection.CachedClass
$5.initValue(CachedClass.java:139)
04-07 08:44PM 14.541 at
org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:
33)
04-07 08:44PM 14.541 at
org.codehaus.groovy.util.LazyReference.get(LazyReference.java:20)
04-07 08:44PM 14.541 at
org.codehaus.groovy.reflection.CachedClass.getCallSiteLoader(CachedClass.java:
464)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePojoMethod(CallSiteGenerator.java:
222
04-07 08:44PM 14.541 at
org.codehaus.groovy.reflection.CachedMethod.createPojoMetaMethodSite(CachedMethod.java:
244)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createCachedMethodSite(PojoMetaMethodSite.j
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createPojoMetaMethodSite(PojoMetaMethodSite
04-07 08:44PM 14.541 at
groovy.lang.MetaClassImpl.createPojoCallSite(MetaClassImpl.java:2987)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:
114)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:
148)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:
40)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
117)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
125)
04-07 08:44PM 14.541 at image.run(image.groovy:18)
04-07 08:44PM 14.541 at
groovy.util.GroovyScriptEngine.run(GroovyScriptEngine.java:464)
04-07 08:44PM 14.541 at groovy.servlet.GroovyServlet
$1.call(GroovyServlet.java:120)
04-07 08:44PM 14.541 at
org.codehaus.groovy.runtime.GroovyCategorySupport
$ThreadCategoryInfo.use(GroovyCategorySupport.java
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.GroovyCategorySupport
$ThreadCategoryInfo.access$200(GroovyCategorySuppo
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:
201)
04-07 08:44PM 14.542 at
groovy.servlet.GroovyServlet.service(GroovyServlet.java:129)
04-07 08:44PM 14.542 at groovyx.gaelyk.GaelykServlet.super
$5$service(GaelykServlet.groovy)
04-07 08:44PM 14.542 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
04-07 08:44PM 14.542 at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.542 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.542 at java.lang.reflect.Method.invoke(Method.java:
43)
04-07 08:44PM 14.542 at
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:
88)
04-07 08:44PM 14.542 at
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
04-07 08:44PM 14.542 at
groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:
1
04-07 08:44PM 14.542 at groovyx.gaelyk.GaelykServlet
$_service_closure1.doCall(GaelykServlet.groovy:45)
04-07 08:44PM 14.542 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
04-07 08:44PM 14.542 at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.542 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.542 at java.lang.reflect.Method.invoke(Method.java:
43)
04-07 08:44PM 14.542 at
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:
88)
04-07 08:44PM 14.542 at
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
272)
04-07 08:44PM 14.542 at
groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:
66)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:
44)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
143)
04-07 08:44PM 14.542 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
151)
04-07 08:44PM 14.543 at groovyx.gaelyk.GaelykServlet
$_service_closure1.doCall(GaelykServlet.groovy)
04-07 08:44PM 14.543 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
04-07 08:44PM 14.543 at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.543 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.543 at java.lang.reflect.Method.invoke(Method.java:
43)
04-07 08:44PM 14.543 at
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:
88)
04-07 08:44PM 14.543 at
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
272)
04-07 08:44PM 14.543 at
groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
04-07 08:44PM 14.543 at groovy.lang.Closure.call(Closure.java:276)
04-07 08:44PM 14.543 at groovy.lang.Closure.call(Closure.java:271)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.GroovyCategorySupport
$ThreadCategoryInfo.use(GroovyCategorySupport.java
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.GroovyCategorySupport
$ThreadCategoryInfo.access$200(GroovyCategorySuppo
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:
201)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:
315)
04-07 08:44PM 14.543 at org.codehaus.groovy.runtime.dgm
$644.invoke(Unknown Source)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite
$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(P
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:
51)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:
44)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
143)
04-07 08:44PM 14.543 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
155)
04-07 08:44PM 14.543 at
groovyx.gaelyk.GaelykServlet.service(GaelykServlet.groovy:44)
04-07 08:44PM 14.543 at
javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
04-07 08:44PM 14.543 at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
04-07 08:44PM 14.544 at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
04-07 08:44PM 14.544 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
04-07 08:44PM 14.544 at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.544 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
04-07 08:44PM 14.544 at java.lang.reflect.Method.invoke(Method.java:
43)
04-07 08:44PM 14.544 at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite
$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke
04-07 08:44PM 14.545 at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:
52)
04-07 08:44PM 14.545 at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:
40)
04-07 08:44PM 14.545 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
117)
04-07 08:44PM 14.545 at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
129)
04-07 08:44PM 14.545 at
groovyx.gaelyk.routes.RoutesFilter.doFilter(RoutesFilter.groovy:116)
04-07 08:44PM 14.545 at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
04-07 08:44PM 14.545 at
com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:
97)
04-07 08:44PM 14.545 at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
04-07 08:44PM 14.545 at
com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:
35)
04-07 08:44PM 14.545 at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
04-07 08:44PM 14.545 at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java
04-07 08:44PM 14.545 at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
04-07 08:44PM 14.545 at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
388)
04-07 08:44PM 14.545 at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
04-07 08:44PM 14.546 at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)
04-07 08:44PM 14.546 at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
04-07 08:44PM 14.546 at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
04-07 08:44PM 14.546 at
com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:
238)
04-07 08:44PM 14.546 at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
04-07 08:44PM 14.546 at org.mortbay.jetty.Server.handle(Server.java:
326)
04-07 08:44PM 14.546 at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)
04-07 08:44PM 14.546 at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:923)
04-07 08:44PM 14.546 at
com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:
76)
04-07 08:44PM 14.546 at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
04-07 08:44PM 14.546 at
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdap
04-07 08:44PM 14.546 at
com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:
243)
04-07 08:44PM 14.546 at com.google.apphosting.base.RuntimePb
$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5485)
04-07 08:44PM 14.546 at com.google.apphosting.base.RuntimePb
$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5483)
04-07 08:44PM 14.546 at
com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:
24
04-07 08:44PM 14.546 at
com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:398)
04-07 08:44PM 14.546 at com.google.net.rpc.impl.Server
$2.run(Server.java:852)
04-07 08:44PM 14.546 at
com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:
56)
04-07 08:44PM 14.546 at
com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:
536)
04-07 08:44PM 14.546 at
com.google.net.rpc.impl.Server.startRpc(Server.java:807)
04-07 08:44PM 14.546 at
com.google.net.rpc.impl.Server.processRequest(Server.java:369)
04-07 08:44PM 14.546 at
com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:
442)
04-07 08:44PM 14.547 at
com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:
319)
04-07 08:44PM 14.547 at
com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:
290)
04-07 08:44PM 14.547 at
com.google.net.async.Connection.handleReadEvent(Connection.java:474)
04-07 08:44PM 14.547 at
com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:
831)
04-07 08:44PM 14.547 at
com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:
207)
04-07 08:44PM 14.547 at
com.google.net.async.EventDispatcher.loop(EventDispatcher.java:103)
04-07 08:44PM 14.547 at
com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:
251)
04-07 08:44PM 14.547 at com.google.apphosting.runtime.JavaRuntime
$RpcRunnable.run(JavaRuntime.java:404)
04-07 08:44PM 14.547 at java.lang.Thread.run(Unknown Source)
Thanks
Daisy
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.