Oracle JDK 8u77から8u92にアップグレードし、以前は動作していなかったスクリプトが突然動作しなくなりました。最小限の再生は、次のとおりです。NashornがBigDecimalで動作しなくなった
Map<String, Object> attributes = Collections.singletonMap("GROSSREIMBAMOUNT", BigDecimal.ZERO);
String script = "GROSSREIMBAMOUNT.toFixed(2)";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
for (Entry<String, Object> entry : attributes.entrySet()) {
jsEngine.put(entry.getKey(), entry.getValue());
}
System.out.println(jsEngine.eval(script));
以前に我々は
0.00
を得ました。しかし、今、私たちは取得しています。
TypeError: GROSSREIMBAMOUNT.toFixed is not a function
typeof
は、今では以前number
を返しますobject
を返します。
私の質問は意図的な動作かバグですか?私はまずこれがバグだろうが、JDK-8010732がそうでなければ示唆しているようだ。
JDK 8のリリースノートでこれについての説明はありませんでした。 @ hannes-wallnöferによって参照されるバグは、https://bugs.openjdk.java.net/browse/JDK-8146264です。 –