Hemos migrado de jdk8 a jdk17 y tuvimos que usar graalvm js en lugar de nashorn js. Descubrimos que graalvm js interpreta java.util.Date siempre que no sea una fecha. Aquí hay 2 ejemplos.
Usando jdk8 (nashorn):
public static void main(String[] args) { Map<String, Object> parameters = new HashMap<>(); Date activationDate = DATE_FORMAT.parse("04/30/2008 00:00:00"); parameters.put("aActivationDate", activationDate); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); bindings.putAll(parameters); engine.eval("print(aActivationDate)", bindings); }El resultado de este código es: miércoles 30 de abril 00:00:00 EDT 2008
Usando jdk17 con graalvm js.
public static void main(String[] args) { Map<String, Object> parameters = new HashMap<>(); Date activationDate = DATE_FORMAT.parse("04/30/2008 00:00:00"); parameters.put("aActivationDate", activationDate); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); bindings.put("polyglot.js.nashorn-compat", true); bindings.putAll(parameters); engine.eval("print(aActivationDate)", bindings); }El resultado de este código es: 1209528000000
¿Qué se debe hacer para que graalvm interprete java.util.Date de la misma manera que nashorn js? Gracias.