0

ScriptEngine eval を使用しようとすると、常に 0 の値が返されるという問題があります。Logger を使用することで、NullPointerExceptions が生成されていることを確認できました。さらに調べてみると、GAE は常に有効なスクリプト エンジンを返すとは限らないようです (あるとしても)。これは、使用しようとすると例外がスローされるためです。

私のコードは次のようになります:

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;
    }     
}

WebApp としてローカルで実行すると、すべて正常に動作します (Eclipse と Netbeans の両方で、Tomcat と Glassfish 4.0 内で)。

私が評価しようとした文字列のいくつか:

  • 62.0 / 100
  • 0.0 * 352.0
  • (0 - 428) * 1000
  • (0 - 597) * 1000
  • 73.0 / 100

注: 0 または 0.0 は、以前の呼び出しで失敗した他の評価からのものです。この関数はエラー時に 0 を返すため。

Google の JRE Class Whitelistによると、ScriptEngineManager および ScriptEngine クラスが許可されています。そのため、なぜ期待どおりに機能しないのかわかりません。

助言がありますか?

前もって感謝します、

ランディ

4

1 に答える 1