cn.hutool.extra.expression.engine.rhino.RhinoEngine Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.extra.expression.engine.rhino;
import cn.hutool.core.map.MapUtil;
import cn.hutool.extra.expression.ExpressionEngine;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
import java.util.Collection;
import java.util.Map;
/**
* rhino引擎封装
* 见:https://github.com/mozilla/rhino
*
* @author lzpeng
* @since 5.5.2
*/
public class RhinoEngine implements ExpressionEngine {
static {
checkEngineExist(Context.class);
}
@Override
public Object eval(String expression, Map context, Collection> allowClassSet) {
final Context ctx = Context.enter();
final Scriptable scope = ctx.initStandardObjects();
if (MapUtil.isNotEmpty(context)) {
context.forEach((key, value)->{
// 将java对象转为js对象后放置于JS的作用域中
ScriptableObject.putProperty(scope, key, Context.javaToJS(value, scope));
});
}
final Object result = ctx.evaluateString(scope, expression, "rhino.js", 1, null);
Context.exit();
return result;
}
private static void checkEngineExist(Class> clazz){
// do nothing
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy