我遇到一个问题,当我尝试使用ScriptEngine eval时,总会得到0值。通过使用Logger,我可以确定有NullPointerExceptions正在生成。进一步检查之后,看起来GAE并不总是返回有效的脚本引擎(如果曾经),因为它在尝试使用它时会引发异常。JavaScript ScriptEngine在Google App Engine for Java(GAE/J)中不工作
我的代码是这样的:如果我在本地运行的Web应用程序
public double myEval(String JsFormulaStr) {
double solutionValue = 0;
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine eng = mgr.getEngineByName("JavaScript");
if(eng == null) { // Added this block of code to prevent java.lang.NullPointerException...
log.severe("Unable to get Script Engine.");
return 0;
}
try {
Object jsResults = eng.eval(JsFormulaStr);
solutionValue = Double.parseDouble(jsResults.toString());
return solutionValue;
} catch(Exception e) {
log.severe("[ERROR] in getCalculatedSolution_FromJS_ToDouble()::\n\t" +
"Formula String is: " + JsFormulaStr + "\n\t" + e);
return 0;
}
}
一切工作正常(无论是在Eclipse中& NetBeans和Tomcat中& Glassfish的4.0)。
一些串的哪些我试图EVAL:
- 62.0/100
- 0.0 * 352.0
- (0 - 428)* 1000
- (0 - 597)* 1000
- 73.0/100
注:0或0.0的是从已经失败的I其他评价之前的电话。由于该函数在出错时返回0。
根据Google's JRE Class Whitelist,ScriptEngineManager和ScriptEngine类是允许的。所以我不明白为什么它没有按预期工作。
有什么建议吗?
由于提前,
兰迪