Ho il seguente programma, che esegue Javascript in Java (nashorn). Il codice Javascript sta restituendo un oggetto.Come cancellare i valori restituiti da javascript (nashorn) nell'oggetto Java?
public Object execute(){
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine e = sem.getEngineByName("nashorn");
Invocable invocable = (Invocable)e;
ScriptEngineFactory f = e.getFactory();
Object result;
try {
String statement = "function fetch(value, count) { count++ ; return {'value': value,'count' : count} }; } ; ";
CompiledScript cs = ((Compilable)e).compile(statement);
cs.eval();
result = invocable.invokeFunction("fetch", 10,2);
}
catch (Exception se) {
String version = System.getProperty("java.version");
System.out.println(version);
result = "script exception ";
}
Come accedere ai valori dell'oggetto nel mio oggetto risultato in Java? Inizialmente, ho provato a utilizzare result.toString()
per ottenere risultati. Sembra return [Object Object]
C'è un modo, dove ho potuto restituire i risultati per result
oggetto così che avrei potuto ottenere valori equivalenti a result.value
, e result.count
(simile a Javascript).
Grazie mille! JSObject mi ha salvato la giornata. Stavo usando ScriptObjectMirror che è un no totale nel mio caso. – Rahul
@Rahul L'interfaccia Nahorn 'JSObject' è implementata da' jdk.nashorn.api.scripting.ScriptObjectMirror' effettivamente restituito da 'invokeFunction'. – Alnitak
Attualmente sto usando un cast per 'Map', che funziona bene perché 'ScriptObjectMirror' implementa effettivamente quell'interfaccia ... Dovrei usare' JSObject' invece? Non ho ancora trovato una documentazione chiara su questo argomento ... L'interfaccia 'Invocable' definisce appena' Object' come tipo restituito, che è piuttosto inutile. –