2016-11-22 44 views
0

我最近将我的java版本从java 1.7升级到java 1.8。升级后,我得到这个错误。nashorn的Wicket配置

引起:ECMAScript异常:类型错误:找不到ScriptObject和My Interface的通用类加载器。

我需要使用哪个版本的wicket,它支持java 1.8和nashorn脚本引擎。我也需要配置任何与脚本引擎相关的任何检票。

我曾尝试添加这种依赖性

<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

检票不需要犀牛。您可以在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)engine).getInterface(thiz,myScript.getScriptInterfaceClass()); – Bhagat

+0

引起:ECMAScript异常:TypeError:找不到ScriptObject和My Interface的通用类加载器。 \t在jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) \t在jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213) \t在jdk.nashorn.internal .runtime.ECMAErrors.typeError(ECMAErrors.java:185) \t at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172) – Bhagat