Why doesn't jsr-223 evaluate a string when it is an attribute of an object?
A simple class with only one String attribute:
public class EvalJSR223Bean { public String evalFnt; }
A simple evaluation using text and an object, and when an object is used, Rhino does not perform an eval. But if I concatenate an empty javascript string into an object property, Rhino eval.
public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); engine.eval("function f2() {println('EXECUTED!!!!!')}; function f1(source) { return eval(source); };"); String evalFnt = "(function(){f2();return '0';})();"; engine.put("evalFnt", evalFnt); engine.eval("f1(evalFnt);"); // f2 is executed. EvalJSR223Bean bean = new EvalJSR223Bean(); bean.evalFnt = evalFnt; engine.put("bean1", bean.evalFnt); engine.eval("f1(bean1.evalFnt);"); // Why does NOT executed f2 ?!!. engine.put("bean", bean); engine.eval("f1(bean.evalFnt);"); // Why does NOT executed f2 ?!!. engine.put("bean", bean); engine.eval("f1( ''+bean.evalFnt );"); // And if I concatenate a string, f2 is executed!!! }
source share