Bhagat
Bhagat

Reputation: 11

Wicket configuration for nashorn

I recently upgraded my java version from java 1.7 to java 1.8. After the upgrade i am getting this error.

Caused by: ECMAScript Exception: Type Error: Can not find a common class loader for ScriptObject and My Interface.

Which version of wicket do i need to use which supports java 1.8 and nashorn script engine. Also do i need to configure anything related to Script Engine for wicket.

I have tried adding this dependency

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

and ScriptEngineManager sem = new ScriptEngineManager(); engine = sem.getEngineByName("nashorn");

but i am still getting the same issue.

Please help me fix this issue.

Below is my method

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;
        }
    }

Upvotes: 0

Views: 110

Answers (1)

martin-g
martin-g

Reputation: 17513

Wicket doesn't need Nashorn. You can use Wicket 1.5/6.x/7.x/8.x with Java 8.

wicketstuff-nashorn is definitely not needed to run Wicket application.

Without the actual error it is hard for us to tell why it is failing.

Update: why do you use new ScriptEngineManager(null), i.e. null ClassLoader. Better use new ScriptEngineManager() and it will use the context class loader which most probably knows about both classes. Or use new ScriptEngineManager(YourInterface.class.getClassLoader())

Upvotes: 1

Related Questions