2016-11-22 3 views
0

最近私のJavaバージョンをJava 1.7からJava 1.8にアップグレードしました。アップグレード後、私はこのエラーが発生しています。ナショーン用のウィケット設定

原因:ECMAScript例外:タイプエラー:ScriptObjectおよびMy Interfaceの共通クラスローダーが見つかりません。

Java 1.8とnashornスクリプトエンジンをサポートする、使用する必要のあるウィジェットのバージョン。また、私はwicket用のScript Engineに関連するものを設定する必要があります。

私はこの依存

<dependency> 
      <groupId>org.wicketstuff</groupId> 
      <artifactId>wicketstuff-nashorn</artifactId> 
      <version>7.4.0</version> 
     </dependency> 

とScriptEngineManager SEM =新しいScriptEngineManager()を追加しようとしています。 engine = sem.getEngineByName( "nashorn");

でも、私はまだ同じ問題を抱えています。

この問題を解決するのを手伝ってください。以下は

private final ScriptEngine engine; 
ScriptEngineManager sem = new ScriptEngineManager(); 
engine = sem.getEngineByName("nashorn"); 

public <K> K getNewInterface(MyScript myScript){ 
     ScriptContext ctx = new SimpleScriptContext(); 
     String script = myScript.getScript(); 
     if(Strings.isEmpty(script)) {markInvalid(myScript, "Script is empty", null); return null;} 
     script += " (function(){return this;})();"; 
     Object thiz; 
     try{ 
      thiz = engine.eval(script, ctx); 
     } catch (ScriptException e){ 
      markInvalid(myScript, "Can't execute script", e); 
      return null; 
     } 
     if(thiz==null) {markInvalid(myScript, "Script executed, but context is null", null); return null;} 
     K ret = (K) ((Invocable)engine).getInterface(thiz, myScript.getScriptInterfaceClass()); 
     if(ret==null) { 
      markInvalid(myScript, "Script executed, but it's incompatible with required interface", null); 
      return null; 
     }else{ 
      myScript.setValid(true); 
      return ret; 
     } 
    } 

答えて

1

ウィケットがNashornを必要としない、私の方法です。 Java 8でWicket 1.5/6.x/7.x/8.xを使用できます。

wicketstuff-nashornはWicketアプリケーションを実行するためには必要ありません。

実際のエラーがなければ、なぜ失敗しているのかわかりにくいです。

更新:なぜnew ScriptEngineManager(null)、つまりnull ClassLoaderを使用しますか?より良い使用new ScriptEngineManager()とそれはおそらく両方のクラスについて知っているコンテキストクラスローダーを使用します。または使用new ScriptEngineManager(YourInterface.class.getClassLoader())

+0

あなたの答えマーティンありがとうございます。 – Bhagat

+0

私はエラーを取得しているステートメントは - K ret =(K)((Invocable)エンジン).getInterface(thiz、myScript.getScriptInterfaceClass()); – Bhagat

+0

原因:ECMAScript例外:TypeError:ScriptObjectおよびMy Interfaceの共通クラスローダーが見つかりません。 jdk.nashorn.internalで jdk.nashorn.internal.runtime.ECMAErrors.errorで\t(ECMAErrors.java:57) jdk.nashorn.internal.runtime.ECMAErrors.typeErrorで\t(ECMAErrors.java:213) \t .runtime.ECMAErrors.typeError(ECMAErrors.java:185) \t at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172) – Bhagat

関連する問題