问题标签 [jsr223]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
336 浏览

java - Java + 脚本引擎:JSR223 + 类似替代方案之间的差异

在使用 JSR223 的 Rhino 接口时,我开始遇到一些非常烦人的问题:

  • 异常信息不佳(请参阅我的其他 SO 问题
  • 无法使用ScriptableObject(最好将 Javascriptfoo变量设置为具有属性的 Javascript 值,以便我可以设置foo.barfoo.baz其他内容。JSR223 只是让我将根全局变量设置为 Java 值。)
  • 无法设置只读变量/属性

如有必要,我会考虑切换到 Rhino 作为本机脚本引擎,但这会带来无法支持其他语言的痛苦,而无需付出额外的努力。

除了JSR223还有没有更好的抽象层?

我听说过Bean Scripting Framework,但不确定它有何不同/更差/更好。我也遇到过圣经,对此一无所知。

0 投票
2 回答
817 浏览

java - jsr223 + 编写脚本解释器

好的。ScriptEngine.eval(String string)完整地评估一个字符串,并完整地ScriptEngine.eval(Reader reader)评估来自 a 的输入Reader

因此,如果我有一个文件,我可以打开一个 FileInputStream,在它周围包裹一个 Reader,然后调用scriptEngine.eval(reader).

如果我有一个完整的语句作为字符串,我可以调用scriptEngine.eval(string).

如果我需要实现交互式解释器,我该怎么办?我有一个用户正在交互式输入多行语句,例如

如果我逐行读取输入,并使用 的字符串形式eval(),我最终会传递给它不完整的语句,例如function f() {并得到一个错误。

如果我传入一个 Reader,ScriptEngine它将永远等到输入完成,并且它不是交互式的。

帮助!


澄清一下:这里的问题是我只能传递ScriptEngine.eval()完整的语句,作为 ScriptEngine 的客户,如果没有 ScriptEngine 本身的帮助,我不知道输入行何时完成。


Rhino 的交互式 shell 使用 Rhino 的Context.stringIsCompilableUnit()(参见 LXR 的用法实现)。

0 投票
2 回答
1522 浏览

java - Rhino 和 Java 通过 JSR223 进行互操作:使用 Javascript 对象实例

这与关于数组的其他 SO question非常相似。

如果我评估:

在通过 JSR223 (ScriptingEngine) 实例化的 Javascript 脚本中,我得到了NativeObject某种(我在 Eclipse 的调试器中看到这个)并且不知道如何访问它的属性。此外,我什至不知道哪个 .jar 文件(如果有),我需要添加到我的构建路径才能使用相关类,如果我找到一种适用于 Rhino Javascript 的方法,它对杰通。

似乎 JSR223 应该包含对 ScriptingEngine 的与语言无关的访问方法,以提供将返回的对象包装为List<Object>用于数组或Map<String, Object>用于关联数组的能力。

有什么建议么?

0 投票
3 回答
3882 浏览

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

到目前为止,我已经尝试了 scala 的 jsr223 脚本的 sling 实现,但无法正确设置它。当我这样做时:

除了:

类似的问题在这里讨论: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

也许还有另一个我不知道的实现。

任何帮助表示赞赏

0 投票
1 回答
936 浏览

java - JSR223 Javascript 中的回调,Oracle JRE 1.6 和 OpenJDK 1.6 之间的区别(例如安装在 Debian 上)

鉴于以下情况,使用 Oracle JRE 6 运行会给出输出 boo,但 OpenJDK 6 会给出异常

这大概是因为使用 OpenJDK(可能是随它提供的 rt.jar)该函数得到一个java.lang.String,但使用 Oracle 得到一个 JavaScript 字符串(或可以隐式强制为一个的东西)。

那么哪个更正确呢?Javascript(在这种情况下)是 API,那么我们可以编写 Java 使得 API 对于任何一种实现都相同吗?(如果 OpenJDK 实现“更正确”(并且很可能是未来每个人都会做的事情),那么我猜想更改 API(文档、示例、测试)的投入new String(...)并不是不可能的,但我除非我更有信心,否则我宁愿不要丑化 API。)

0 投票
3 回答
2772 浏览

java - OSGi 从根本上与 JSR-223 脚本语言发现不兼容吗?

我最近编写了一种小型专业脚本语言,并使用 Maven 导出了一个兼容 OSGi 的包,该包还将服务描述符导出到“ META-INF/services/javax.script.ScriptEngineFactory”服务注册表文件中。

问题在于,尽管 OSGi 导入和导出包都很好,但服务注册表似乎与 OSGi 不兼容(因为 OSGi 将其捆绑包远离通用类路径并为模块使用单独的类加载器)。

我的问题是,我认为 OSGi 与服务发现机制不兼容是否正确,如果不是,我可以添加什么到我的包元数据中,以便ScriptEngineManager.getEngineFactories()在 OSGi 环境中列出我的脚本引擎?

0 投票
3 回答
135 浏览

java - Java Scripting (JSR223) = 用于模板的 Bean/Script Shell?

我还没有使用过任何东西"java scripting" (JSR223),我的问题与 linux(和 windows)有关。

是否有一种简单的方法(在安装脚本语言和 java 之后)来执行以下操作:

  1. 运行导入模板(=带有占位符/变量的文件)的脚本(以相应的语言)。
  2. 这进一步导入(从文件系统读取)具有键=值对的配置文件(java 属性文件)
  3. 并用键值对填充占位符。
  4. 并将“合并”的内容写入文件系统上的文件中......

(这个脚本应该很容易像“java scriptingenvironment scriptname myparameters”一样调用)

这很容易吗和/或你以前做过吗?你甚至知道之前已经描述/完成的任何链接吗?

非常感谢你!!!!

马库斯

0 投票
1 回答
1013 浏览

java - 如何使用 JSR 223 保护脚本?

我使用 Groovy 作为动态脚本引擎,以允许我的 Web 应用程序的管理员用户创建小脚本作为界面解决方案的一部分,例如。做简单的字符串操作,tokenize 等等。
不幸的是,这打开了一个很大的漏洞,因为默认情况下脚本引擎会执行任何操作。
我在这里描述了一个演示应用程序:http: //javadude.wordpress.com/2011/06/29/creating-a-zk-groovy-console/

您可以执行System.exit(0)which 关闭 AS 甚至 shell 命令,如"ls -l".execute().text或只是窥探系统设置println InetAddress.localHost.hostAddress

我可以在执行之前进行字符串检查,例如过滤System.xyzexecute.xyz

有什么经验或食谱吗?

谢谢
斯文

0 投票
2 回答
416 浏览

php - JSR-223 - 在哪里可以找到 ScriptServlet?

我很困惑我应该在哪里找到com.sun.script.http.ScriptServlet我在网络上的大量样本中看到的。

JSR-223 是否包含在 JDK 1.6 中?我见过人们谈论参考实现,但 Oracle 网站上唯一有效的链接似乎不包含这样的类。我的非本地环境也使用 OpenJDK,我怀疑它是否会有任何 JSR-223 的 Sun 实现!在这种情况下,我可以从哪里得到它?我什至不确定在这种情况下“它”是什么:/

我希望能够使用 PHP 作为视图技术,从 Servlet 调用。我收集 JSR-223 的设计考虑到了这种用法,但我很难弄清楚

编辑

特别是一份指南(http://acet.rdg.ac.uk/projects/vre/jsr223inst.php)提到了通过 JNI 调用 PHP,这听起来很理想。如果作为最终规范的一部分存在允许我通过 Servlet 执行此操作的内容,我将是一只非常高兴的兔子。

0 投票
1 回答
92 浏览

java - 识别已经执行的脚本 - JSR 223

我正在考虑使用 JSR 223 在应用程序中提供 Jython 脚本。我有点害怕有人编写无限循环,最终需要重新启动整个 Web 应用程序。我一直在寻找一种制作“当前执行”脚本列表的方法(以构建某种“ps”命令的想法)和某种杀死它们的方法,但我在 API 中看不到任何会提供的。有任何想法吗?