我在Apache JMeter中使用Quercus来编写简单的测试脚本。我有一个要求,从PHP日志使用log4j,这在整体上工作得很好。所以我写了一个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);
}
}现在,我使用以下代码对其进行测试:
公共类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模块。文档有点稀疏...任何帮助都将不胜感激。
发布于 2011-08-19 06:36:38
1.
ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("php");if( engine instanceof QuercusScriptEngine )
{
((QuercusScriptEngine)engine).getQuercus().addModule(new LogFunction());
}这是可行的。(quercus-4.0.18-src +树脂4.0)
发布于 2011-06-28 04:42:24
我最终抛弃了脚本引擎代码,转而使用原生Quercus:
QuercusEngine engine = new QuercusEngine();
engine.getQuercus().getModuleContext().addModule("LogFunction", new LogFunction());
engine.setOutputStream(os);
engine.getQuercus().init();
engine.execute(phpCode);这个可以正常工作。它至少有相当可预测的行为。
https://stackoverflow.com/questions/6494137
复制相似问题