Abbiamo eseguito l'aggiornamento da Oracle JDK 8u77 a 8u92 e improvvisamente gli script che in precedenza funzionavano non funzionano più. Un riproduttore minima è:Nashorn non funziona più con 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));
In precedenza abbiamo ottenuto
0.00
Ma ora stiamo ottenendo.
TypeError: GROSSREIMBAMOUNT.toFixed is not a function
typeof
ora ritorna object
dove sarebbe in precedenza tornare number
.
La mia domanda è questo comportamento intenzionale o un bug? Per prima cosa però sarebbe un errore ma il JDK-8010732 sembra suggerire il contrario.
Non ho trovato alcuna menzione di questo in JDK 8 note di rilascio. Il bug a cui fa riferimento @ hannes-wallnöfer è https://bugs.openjdk.java.net/browse/JDK-8146264 –