1

我将一个对象“transformContext”从 Java 传递到 Graal.js scriptEngine。该对象包含一个名为“dataRecordsByName”的 Hashmap,在 Java 中我通常可以使用以下行访问它:

transformContext.get("dataRecordsByName")

我正在尝试从引擎中检索哈希图。我认为要做到这一点,我需要将上面的行替换为:

engine.eval("transformContext.dataRecordsByName")

然而,这只是返回未定义。

这是我完成此任务的完整代码:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
engine.put("transformContext",transformContext);
engine.eval("console.log(transformContext)");
engine.eval("console.log(transformContext.dataRecordsByName)");

这是控制台的输出:

TransformContext(dataRecordsByName={$=[], CONVERSION=[{"From_Currency":"AUD","To_Currency":"AUD","Conversion_Rate":1.0,"historical_date":"31/05/2021","organisation_id ":"ParentId","organisation_currency":"GBP","organisation_name":"Parent Id"}],...}, objectMapper=com.fasterxml.jackson.databind.ObjectMapper@21dfdc26)

不明确的

有谁知道为什么引擎无法检索 dataRecordsByName 属性?

4

1 回答 1

1

经过一些进一步的研究,似乎 graal.js 默认情况下并没有像我预期的那样映射属性,但是如果你在 nashorn 兼容模式下运行它可以这样做。

System.setProperty("polyglot.js.nashorn-compat", "true");

完成此操作后,您可以像在 JavaScript 中一样检索对象属性:

engine.eval("console.log(transformContext.dataRecordsByName)");

感谢这个线程上的人:https ://github.com/oracle/graaljs/issues/169

于 2021-08-09T11:45:42.177 回答