【问题标题】:Kotlin JSR223 engine passing bindingsKotlin JSR223 引擎传递绑定
【发布时间】:2019-04-03 09:10:07
【问题描述】:

我正在尝试将值传递给 JSR223 引擎上的 kotlin 脚本,但它没有获取绑定。

class Script<C : ScriptContext>(val scriptClass : KClass<C>, val script : String?) {
    fun execute(context : C) {
        if (script != null) {
            System.setProperty("idea.use.native.fs.for.win", "false")
            val scriptWithContext = """
                import ${scriptClass.java.canonicalName}

                println(ctx)
            """.trimIndent()
            with(ScriptEngineManager().getEngineByExtension("kts")) {
                val c = SimpleScriptContext()
                c.setAttribute("ctx", context, javax.script.ScriptContext.ENGINE_SCOPE)
                eval(scriptWithContext, c)
            }

        }
    }    
}

抛出异常:

Exception in thread "main" javax.script.ScriptException: error: unresolved reference: ctx
                println(ctx)
                        ^

    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compileAndEval(KotlinJsr223JvmScriptEngineBase.kt:65)
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.eval(KotlinJsr223JvmScriptEngineBase.kt:31)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
...

我错过了什么?

【问题讨论】:

    标签: kotlin jsr223


    【解决方案1】:

    尚不支持绑定变量的直接映射。有一个关于它的issue。 目前,您可以通过bindings 映射访问变量:

    println(bindings["ctx"])

    【讨论】:

    • 更新:从 Kotlin 1.3.50 开始,绑定按预期工作,不需要 bindings[] 引用!
    • @Balage1551 你能解释一下吗?我没有在 JMeter 的 JSR223 中使用绑定
    • @Balage1551 我在 Kotlin-1.4.21 上遇到了这个问题 :-(。可能我必须配置一些东西。你使用什么 javax.script.ScriptEngineFactory,以及什么依赖项?
    猜你喜欢
    • 2019-04-02
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多