Tag: nashorn

使用varargs参数调用重载方法时的Nashorn错误

假设以下API: package nashorn.test; public class API { public static void test(String string) { throw new RuntimeException(“Don’t call this”); } public static void test(Integer… args) { System.out.println(“OK”); } } 以下Nashorn JavaScript代码段将失败: var API = Java.type(“nashorn.test.API”); API.test(1); 将调用第一种方法而不是第二种方法。 这是Nashorn引擎中的一个错误吗? 为了记录,此问题先前已在jOOQ用户组上报告 ,其中方法重载和varargs被大量使用,并且此问题可能会导致很多麻烦。 关于拳击 可能有人怀疑这可能与拳击有关。 它没有。 当我这样做时,问题也出现了 public class API { public static void test(String string) { throw new […]

如何从Nashorn引擎中删除java apis?

是否可以从nashorn-engine隐藏或删除java api? 因此它只能看到或使用“默认”ECMAScript 262 Edition 5.1以及一些特别暴露的函数/变量? 我想让我的最终用户为他们自己创建一些特定的逻辑,而不用担心他们会破解整个系统。 当然,在nashorn引擎等中可能存在一些安全漏洞,但这是不同的主题。 编辑:对不起,我忘了提到我在我的java应用程序中运行nashorn,因此不能使用命令行参数。

在Servlet中重用Nashorn ScriptEngine

我想在servlet中执行JavaScript。 是否可以在所有servlet调用中重用相同的Scripting Engine? Servlet实例由多个线程共享。 这是否需要为每个请求创建一个新的脚本引擎? 这将是一个令人无法接受的性能损失。 例如,以下代码是否保存? public class MyServlet extends HttpServlet { private ScriptEngineManager factory; private ScriptEngine engine; @Override public void init() throws ServletException { factory = new ScriptEngineManager(); engine = factory.getEngineByName(“nashorn”); } @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { try (PrintWriter writer = res.getWriter()) { ScriptContext newContext = new SimpleScriptContext(); […]

ClassLoader中的Java 8 ScriptEngine

我需要在’不同的类加载器’内部执行一些javascript代码。 如果是java,则每个任务都将在单独的类加载器中运行。 现在我需要这个是javascript。 我是否需要在每个类加载器中创建ScriptEngine新实例,或者可以跨类加载器共享一个实例?