You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Harmeet Bedi <ha...@gmail.com> on 2009/10/28 01:56:45 UTC

BshUtil eval and treatment of context

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