It appears that BshUtil.eval overwrites updates(but not inserts) to context 
variables. 
That did not seem right. It seemed more natural that pipeline processing of 
events depend on context being set in previous actions. Wondering if this is a 
bug and what the best fix could be.


See following code:  First context key-value is copied into Bsh 
'globalNamespace', eval done, and then variables copied from bsh 
globalNamespace onto context, thereby overwriting any changes done to context 
key-values inside the 'eval'.

BshUtil.java
    public static final Object eval(String expression, Map<String, Object> 
context) throws EvalError {
            Interpreter bsh = makeInterpreter(context);
            // evaluate the expression
            o = bsh.eval(expression);
...
            // read back the context info
            NameSpace ns = bsh.getNameSpace();
            String[] varNames = ns.getVariableNames();
            for (String varName: varNames) {
                context.put(varName, bsh.get(varName));
            }
    }

where 
    public static Interpreter makeInterpreter(Map<String, ? extends Object> 
context) throws EvalError {
....
            for (Map.Entry<String, ? extends Object> entry: context.entrySet()) 
{
                bsh.set(entry.getKey(), entry.getValue());
            }
..
        return bsh;
    }

thoughts ?
Harmeet

Reply via email to