java - 在 Java ScriptEngine 中使用 Quercus 时如何注册 Quercus 自定义函数?

标签 java php quercus scriptengine

我在 Apache JMeter 中使用 Quercus 来编写简单的测试脚本。我需要使用 log4j 从 PHP 登录,总的来说这很有效。所以我写了一个像这样的 Quercus 模块:

public class LogFunction extends AbstractQuercusModule {

    private static Logger log = Logger.getLogger(LogFunction.class);

    public void log_str(Env env, String str) {
        log.info(str);
    }
}

现在,我正在使用以下代码对此进行测试:

公共(public)类 QuercusTest {

private static ScriptEngine engine;

static{     
    //set up Quercus
    ScriptEngineManager manager = new ScriptEngineManager();
    engine = manager.getEngineByName("php");
}

public static void main(String[] args) throws ScriptException{
    engine.eval("<?php log_str('Hello');");
}

这会引发异常(如我所料),因为此自定义函数未注册。

Exception in thread "main" com.caucho.quercus.QuercusErrorException: eval::1: Fatal Error: 'log_str' is an unknown function.
    at com.caucho.quercus.env.Env.error(Env.java:6420)
    at com.caucho.quercus.env.Env.error(Env.java:6306)
    at com.caucho.quercus.env.Env.error(Env.java:5990)
    at com.caucho.quercus.expr.CallExpr.evalImpl(CallExpr.java:198)
    at com.caucho.quercus.expr.CallExpr.eval(CallExpr.java:151)
    at com.caucho.quercus.expr.Expr.evalTop(Expr.java:523)
    at com.caucho.quercus.statement.ExprStatement.execute(ExprStatement.java:67)
    at com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:413)
    at com.caucho.quercus.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:134)
    at com.caucho.quercus.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:179)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
    at com.succeed.QuercusTest.main(QuercusTest.java:18)

但是,我看不到如何使用 Java 脚本引擎注册这个 Quercus 模块。文档有点稀疏...任何帮助将不胜感激。

最佳答案

1.

ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("php");

2。

if( engine instanceof QuercusScriptEngine )
{
    ((QuercusScriptEngine)engine).getQuercus().addModule(new LogFunction());
}

这行得通。 (quercus-4.0.18-src + resin 4.0)

关于java - 在 Java ScriptEngine 中使用 Quercus 时如何注册 Quercus 自定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6494137/

相关文章:

java - 对堆排序的直观理解?

java - 如何在 java spinner 中将 1000 显示为 1.000

java - Spring Boot映射静态html

java - 如何使用 com.google.appengine.api.datastore.Text

wordpress - Quercus + WordPress 电子邮件配置

java - 如何在未使用 Java WatchService 修改文件时触发事件?

php - 设置 Mandrill 模板 Laravel

php - 在日期和时间之间添加文本 - PHP

javascript - 在动态输入字段中显示多行

java - 在 Java 中运行 Quercus PHP