Repository: incubator-unomi Updated Branches: refs/heads/master cf27900b9 -> 11d9efdb5
UNOMI-113 ClassNotFoundException when using expression to dispatch to an action - Fix class loading exception in condition evaluator Signed-off-by: Serge Huber <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/11d9efdb Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/11d9efdb Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/11d9efdb Branch: refs/heads/master Commit: 11d9efdb5455927fec33a791b4ba0285c2f3da98 Parents: cf27900 Author: Serge Huber <[email protected]> Authored: Mon Jul 10 16:34:40 2017 +0200 Committer: Serge Huber <[email protected]> Committed: Mon Jul 10 16:34:40 2017 +0200 ---------------------------------------------------------------------- .../actions/ActionExecutorDispatcher.java | 24 ++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11d9efdb/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java ---------------------------------------------------------------------- diff --git a/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java b/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java index 62e2463..89f7d05 100644 --- a/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java +++ b/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java @@ -82,16 +82,22 @@ public class ActionExecutorDispatcher { valueExtractors.put("script", new ValueExtractor() { @Override public Object extract(String valueAsString, Event event) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { - if (!mvelExpressions.containsKey(valueAsString)) { - ParserConfiguration parserConfiguration = new ParserConfiguration(); - parserConfiguration.setClassLoader(getClass().getClassLoader()); - mvelExpressions.put(valueAsString, MVEL.compileExpression(valueAsString, new ParserContext(parserConfiguration))); + final ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); + if (!mvelExpressions.containsKey(valueAsString)) { + ParserConfiguration parserConfiguration = new ParserConfiguration(); + parserConfiguration.setClassLoader(getClass().getClassLoader()); + mvelExpressions.put(valueAsString, MVEL.compileExpression(valueAsString, new ParserContext(parserConfiguration))); + } + Map<String, Object> ctx = new HashMap<>(); + ctx.put("event", event); + ctx.put("session", event.getSession()); + ctx.put("profile", event.getProfile()); + return MVEL.executeExpression(mvelExpressions.get(valueAsString), ctx); + } finally { + Thread.currentThread().setContextClassLoader(tccl); } - Map<String, Object> ctx = new HashMap<>(); - ctx.put("event", event); - ctx.put("session", event.getSession()); - ctx.put("profile", event.getProfile()); - return MVEL.executeExpression(mvelExpressions.get(valueAsString), ctx); } }); }
