Tag: jsr223

使用rvm jruby install将JRuby嵌入Java代码中

我正在尝试从Java应用程序中嵌入和评估ruby代码。 我没有将jruby-complete.jar放在我的类路径中,而是需要能够使用与rvm一起安装的jruby环境。 我可以执行基本的内核代码,但是我遇到了需要标准库(fileutils,tmpdir等)的问题。 我在下面创建了一个使用通过RVM安装的JRuby的测试文件,如果你有一个本地的rvm + jruby安装(将JRUBY_VERSION更改为安装的版本),任何人都应该能够编译+运行它。 我意识到我引用的jruby.jar与jruby-complete.jar不同,但我希望有一种方法可以在不下载外部jar的情况下加载标准库。 import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.logging.Logger; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Test { private final static Logger LOG = Logger.getAnonymousLogger(); private final static String JRUBY_VERSION = “jruby-1.6.7”; public static void main(String[] args) throws Throwable { final String rvmPath = System.getenv(“HOME”) + “/.rvm/rubies/”; addFileToClasspath(rvmPath […]

合理处理JSR223 Rhino抛出的ScriptException

我开始遇到一个非常有用的JSR223脚本环境的肮脏小秘密。 我正在使用Java 6 SE附带的内置版Rhino,通过JSR223的ScriptingEngine等访问它。 当我得到一个由我导出到Javascript环境的Java对象引起的exception时,它是一个ScriptingException ,它包装了一个包装我真正exception的sun.org.mozilla.javascript.internal.WrappedException (例如UnsupportedOperationException或者其他) ScriptingException为getFileName()返回null,为getLineNumber()返回-1。 但是当我查看消息和调试器时, WrappedException具有正确的文件名和行号,它只是不通过ScriptingException的getter方法发布它。 大。 现在我该怎么办? 我不知道我将如何使用sun.org.mozilla.javascript.internal.wrappedException,它不是公共类。

如何使用scala作为脚本语言设置jsr223脚本

到目前为止,我已经为scala尝试了jsr223脚本的sling实现,但是无法正确设置它。 当我这样做时: public static void main(String[] args) { try { new ScriptEngineManager().getEngineByName(“scala”). eval(“object HelloWorld {def main(args: Array[String]) { println(\”Hello, world!\”) }}”); } catch (ScriptException e) { e.printStackTrace(); } } 我什么也没得到: javax.script.ScriptException: ERROR org.apache.sling.scripting.scala.Script line 13 : not found: type Script at org.apache.sling.scripting.scala.ScalaScriptEngine.eval(ScalaScriptEngine.scala:117) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) 类似的问题在这里讨论: http : //scala-programming-language.1934581.n4.nabble.com/How-to-compile-Scala-code-from-java-using-the-current-ClassLoader-instead-of-一个字符串为基础,classpat-td1955873.html#a1955873 和 http://dev.day.com/discussion-groups/content/lists/sling-dev/2009-12/2009-12-01_Scala_scripting_support_was_Re_And_another_one____Michael_D_rig.html 也许还有另一个我不知道的实现。 任何帮助赞赏

什么基于JVM的脚本语言支持@WebService在运行时创建服务?

我处于这样一种情况,我需要能够在运行时创建和公开Web服务。 (即没有“javac” – 编译步骤)。 是否有基于JVM的脚本语言对JAX-WS有很好的支持,因此我可以用Java编写中央引擎,然后让脚本语言创建包含Web服务方法的片段(使用@WebService或@WebMethod注释) )然后可以传递给 http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/Endpoint.html#publish(java.lang.String,java.lang.Object) 如果可能的话,请提供一个如何正确执行此操作的示例。 有什么建议么?

沙盒JSR-223

我正在尝试沙箱JSR-223。 具体来说,我不希望任何脚本可以访问我的任何类。 (我听说Rhino可以用ClassShutter做到这一点,但我想一般这样做。即对于JSR-223的所有脚本引擎)。 我首先尝试使用AccessController.doPrivileged解决方案, 完全不传递任何权限 。 它适用于大多数权限,但脚本仍然可以访问我的所有公共类(它似乎忽略“包访问”权限……?)。 我找到了这个 。 我的问题是:如何在脚本引擎上安装自定义ClassLoader? (或者,如果必须,如何全局替换ClassLoader?)

是否有一种与语言无关的方法来向JSR223脚本绑定添加函数?

JSR223 Bindings类允许您将任意Java对象公开给脚本语言。 但他们必须是对象。 我想定义一个函数quit() ,它可以从脚本环境调用,在Java中变成quitObject.run() 。 但是JSR223没有定义函数对象的概念。 是否有一种与语言无关的方式在Javascript中执行以下操作,即采用Runnable()并在脚本环境中创建函数? static private Object asFunction(ScriptEngine engine, Runnable r) throws ScriptException { final Bindings bindings = engine.createBindings(); bindings.put(“r”, r); return engine.eval( “(function (r) { var f = function() { r.run(); }; return f;})(r)”, bindings); } Runnable quitObject = /* get/create a Runnable here */ Bindings bindings = engine.createBindings(); bindings.put(“quit”, […]

使用Nashorn编写Java脚本(JSR 223)和预编译

我通过JSR 223使用Nashorn来执行用户输入脚本的小片段: public Invocable buildInvocable(String script) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName(ENGINE); engine.eval(functions); engine.eval(script); return (Invocable) engine; } 变化的用户脚本调用在静态中央库中定义的JavaScript函数(保存在上面代码片段中的functions String中)。 每当我想要获取一个可以从我的Java调用的Invocable ,我就不得不重新编译大型库代码。 有没有办法用新代码加入以前编译的代码片段?

如何将Rhino-JavaScript数组转换为Java-Arrays

我有以下内容: ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine jsEngine = mgr.getEngineByName(“JavaScript”); jsEngine.eval(“function getArray() {return [1,2,3,4,5];};”); Object result = jsEngine.eval(“getArray();”); 如何将sun.org.mozilla.javascript.internal.NativeArray类型的结果对象转换为相应的java数组? 可以告诉我一个有效的代码示例吗? 它应该适用于String和Integer数组。 另外,知道在哪里查找rhino引擎和java之间的其他数据类型转换会很棒。 顺便说一句, 我知道这个页面,但我真的在寻找一个有效的代码示例。