2017-09-06 11 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"); 

このコードで、objがオブジェクト配列として取得されます。 オブジェクトに変換できません。 Rhinoオブジェクトを使用してJava 1.7で取得しています。 私はOSGiのを使用していますjava.lang.NoClassDefFoundErrorが:のOSGiバンドル内のJDK/nashorn/API /スクリプティング/ ScriptUtils

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

しかし、Javaで1.8

を示しませんcalssDefエラーで試してみました。私はjdk.nashorn.api.scripting.ScriptUtilsをエクスポートしました。 私のjsfileから配列を返しています。

リターンJava.to(データ、 "javaの:

+2

あなたの質問はほとんど読めません。 NoClassDefFoundErrorはクラスパスに必要なクラスがなく、ビルドパスに欠けているjarを追加することを意味します –

+1

完全なstackTraceを投稿できますか? ScriptUtilsクラスがJDKに含まれているため、ScriptUtilsクラスが不足している可能性は低いようです。 – Aaron

+0

java.lang.NoClassDefFoundError:jdk/nashorn/api/scripting/ScriptUtils エラーが表示されています。 jdk/nashorn/api/scripting/ScriptUtilsを追加しました。しかし、それは得ることができないランタイム。 – Diljish

答えて

2

は、私はあなたが以下のように使用すると、Javaスクリプトからデータを返している場合は、JavaコードでScriptUtils.convert()メソッドを使用する必要はありませんと思います。 lang.Object ")

これは役に立ちます。

+0

ありがとうShemeem。 jsファイルのJava.to(data、 "java.lang.Object")として戻り値の型を追加しました。 – Diljish

関連する問題