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 google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.