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);
             }
         });
     }

Reply via email to