You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by "Serge Huber (Jira)" <ji...@apache.org> on 2020/11/16 19:18:00 UTC

[jira] [Created] (UNOMI-401) Wrong classloader used in MvelScriptExecutor

Serge Huber created UNOMI-401:
---------------------------------

             Summary: Wrong classloader used in MvelScriptExecutor
                 Key: UNOMI-401
                 URL: https://issues.apache.org/jira/browse/UNOMI-401
             Project: Apache Unomi
          Issue Type: Bug
          Components: core
    Affects Versions: 1.5.2, 1.5.3, 1.5.4
            Reporter: Serge Huber
             Fix For: 1.5.4


In the new MvelScriptExecutor class, the ContextClassLoader is only set to the local one when compiling the scripts instead of also when executing them. Because of this we sometimes get the following error:

{code}
2020-11-16 18:06:40,269 | WARN  | tp1986789591-143 | ServletHandler                   | 232 - org.eclipse.jetty.util - 9.3.24.v20180605 | Error for /context.js
java.lang.NoClassDefFoundError: org/mvel2/compiler/Accessor
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[?:?]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer$ContextClassLoader.defineClass(ASMAccessorOptimizer.java:2243) ~[?:?]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.loadClass(ASMAccessorOptimizer.java:2252) ~[?:?]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer._initializeAccessor(ASMAccessorOptimizer.java:748) ~[?:?]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:891) ~[?:?]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.optimizeAccessor(ASMAccessorOptimizer.java:279) ~[?:?]
	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.optimize(DynamicGetAccessor.java:95) ~[?:?]
	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:65) ~[?:?]
	at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108) ~[?:?]
	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
	at org.mvel2.optimizers.impl.refl.nodes.MapAccessorNest.setValue(MapAccessorNest.java:67) ~[?:?]
	at org.mvel2.optimizers.impl.refl.nodes.VariableAccessor.setValue(VariableAccessor.java:46) ~[?:?]
	at org.mvel2.optimizers.dynamic.DynamicSetAccessor.setValue(DynamicSetAccessor.java:69) ~[?:?]
	at org.mvel2.compiler.CompiledAccExpression.setValue(CompiledAccExpression.java:59) ~[?:?]
	at org.mvel2.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:111) ~[?:?]
	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
	at org.mvel2.ast.IfNode.getReducedValueAccelerated(IfNode.java:74) ~[?:?]
	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
	at org.mvel2.ast.IfNode.getReducedValueAccelerated(IfNode.java:80) ~[?:?]
	at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) ~[?:?]
	at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123) ~[?:?]
	at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119) ~[?:?]
	at org.mvel2.MVEL.executeExpression(MVEL.java:968) ~[?:?]
	at org.apache.unomi.scripting.MvelScriptExecutor.execute(MvelScriptExecutor.java:72) ~[?:?]
	at Proxy910238ca_b1fb_4d7b_89bb_c895be9aa46e.execute(Unknown Source) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher.executeScript(ActionExecutorDispatcher.java:204) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher$7.extract(ActionExecutorDispatcher.java:100) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher.parseMap(ActionExecutorDispatcher.java:139) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher.getContextualAction(ActionExecutorDispatcher.java:119) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher$8.execute(ActionExecutorDispatcher.java:185) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher$8.execute(ActionExecutorDispatcher.java:182) ~[?:?]
	at org.apache.unomi.metrics.MetricAdapter.runWithTimer(MetricAdapter.java:38) ~[?:?]
	at org.apache.unomi.services.actions.ActionExecutorDispatcher.execute(ActionExecutorDispatcher.java:187) ~[?:?]
	at org.apache.unomi.services.services.RulesServiceImpl.onEvent(RulesServiceImpl.java:276) ~[?:?]
	at org.apache.unomi.services.services.EventServiceImpl.send(EventServiceImpl.java:164) ~[?:?]
	at org.apache.unomi.services.services.EventServiceImpl.send(EventServiceImpl.java:141) ~[?:?]
	at Proxy820fa59c_c682_46e9_baa0_f4229d183053.send(Unknown Source) ~[?:?]
	at org.apache.unomi.web.ServletCommon.handleEvents(ServletCommon.java:89) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
	at org.apache.unomi.web.ContextServlet.handleRequest(ContextServlet.java:324) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
	at org.apache.unomi.web.ContextServlet.service(ContextServlet.java:261) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:840) ~[228:org.eclipse.jetty.servlet:9.3.24.v20180605]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) [228:org.eclipse.jetty.servlet:9.3.24.v20180605]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [222:org.eclipse.jetty.security:9.3.24.v20180605]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:296) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) [228:org.eclipse.jetty.servlet:9.3.24.v20180605]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.Server.handle(Server.java:539) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [226:org.eclipse.jetty.server:9.3.24.v20180605]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:251) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [210:org.eclipse.jetty.io:9.3.24.v20180605]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [232:org.eclipse.jetty.util:9.3.24.v20180605]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [232:org.eclipse.jetty.util:9.3.24.v20180605]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [232:org.eclipse.jetty.util:9.3.24.v20180605]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [232:org.eclipse.jetty.util:9.3.24.v20180605]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [232:org.eclipse.jetty.util:9.3.24.v20180605]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: java.lang.ClassNotFoundException: org.mvel2.compiler.Accessor
	at java.lang.ClassLoader.findClass(ClassLoader.java:530) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
	... 71 more
{code}

We need to fix this to always set the local bundle classloader.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)