我在 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/