2017-09-06 3 views
2
ScriptEngineManager manager = new ScriptEngineManager(null); 
ScriptEngine engine = manager.getEngineByName("nashorn"); 
BundleContext context = FrameworkUtil.getBundle(FormulaImpl.class).getBundleContext(); 
URL configURL = context.getBundle().getEntry("eval.txt"); 
if (configURL != null) { 
    InputStream input = null; 
    try { 
     input = configURL.openStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
     StringBuilder out = new StringBuilder(); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      out.append(line); 
     } 
     engine.eval(out.toString()); 
    } catch (Exception e) { 
     throw new RuntimeException(e.getMessage()); 
    } finally { 
     try { 
      input.close(); 
     } catch (Exception e) { 
      throw new RuntimeException(e.getMessage()); 
     } 
    } 
} 

Object obj = engine.get("formulaColumn"); 

Dans ce code, obj devient comme tableau d'objets. Je ne peux pas convertir en objet. Dans Java 1.7, l'utilisation de l'objet Rhino est en cours. J'ai essayé avecjava.lang.NoClassDefFoundError: jdk/nashorn/api/scripts/ScriptUtils en bundle OSGi

Object obj = (Object)ScriptUtils.convert(engine.get("formulaColumn"), Object.class); 

Mais aucune erreur de calssDef montrant en Java 1.8

J'utilise OSGi. J'ai exporté jdk.nashorn.api.scripting.ScriptUtils. De mon jsfile je retourne un tableau.

+2

Votre question est à peine lisible. NoClassDefFoundError signifie que vous n'avez pas la classe nécessaire dans votre chemin de classe, ajoutez le jar manquant à votre chemin de construction –

+1

Pourriez-vous poster le stackTrace complet? Il semble peu probable que vous manquiez la classe ScriptUtils car elle est incluse dans le JDK. – Aaron

+0

java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ScriptUtils Erreur lors de la visualisation. J'ai ajouté jdk/nashorn/api/scripting/ScriptUtils. Mais l'exécution ne peut pas être obtenue. – Diljish

Répondre

2

Je pense que vous ne devez pas utiliser la méthode ScriptUtils.convert() dans votre code java, si vous retournez vos données à partir du script java comme suit:

retour Java.to (données, "java. lang.Object ")

J'espère que ce serait utile.

+0

Merci Shemeem. J'ai ajouté le type de retour comme Java.to (data, "java.lang.Object") dans le fichier js et cela fonctionne. – Diljish