一个类加载器从IBM更新的Java 7〜8使用在春分OSGi的环境中工作,下面的代码:之前犀牛和OSGi:invocable.getInterface():无法找到ScriptObject和MyInterface的
ScriptEngineManager manager = new ScriptEngineManager(getClass().getClassLoader());
ScriptEngine engine = manager.getScriptEngineManager().getEngineByExtension("js");
engine.eval("<... js code ...>");
((Invocable) engine).getInterface(MyInterface.class) // ECMAScript exception
在之前的设置中,我使用Rhino作为引擎,现在不再注册为可用的ScriptEngineFactory,但仍在类路径中,只有“Oracle Nashorn”。
ECMAScript Exception: TypeError: Can not find a common class loader for ScriptObject and MyInterface.
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:69)
at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:225)
at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:197)
at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:184)
at jdk.nashorn.internal.runtime.linker.AdaptationResult.typeError(AdaptationResult.java:82)
at jdk.nashorn.internal.runtime.linker.JavaAdapterFactory$AdapterInfo.getAdapterClass(JavaAdapterFactory.java:326)
at jdk.nashorn.internal.runtime.linker.JavaAdapterFactory.getAdapterClassFor(JavaAdapterFactory.java:162)
at jdk.nashorn.internal.runtime.linker.JavaAdapterFactory.getAdapterClassFor(JavaAdapterFactory.java:148)
at jdk.nashorn.internal.runtime.linker.JavaAdapterFactory.getConstructor(JavaAdapterFactory.java:202)
at jdk.nashorn.api.scripting.NashornScriptEngine.getInterfaceInner(NashornScriptEngine.java:291)
at jdk.nashorn.api.scripting.NashornScriptEngine.getInterface(NashornScriptEngine.java:216)
...
犀牛试图检查jdk.nashorn.internal.runtime.ScriptFunction(扩展类加载器)的类加载器可以加载:
更新到IBM的Java 8(包括犀牛)我得到下面的异常后定的接口(捆绑类加载器),或者反之亦然通过:
Class.forName(classBName, false, clazzA.getLoader()) == classB;
任何想法如何配置的OSGi让类加载器的一个看对方或其他解决方法与犀牛Java的8 + OSGi的工作?
谢谢您的回答。我尝试使用null初始化ScriptEngineManager,没有使用任何类加载器作为参数,但在Invocable上调用getInterface()时仍然得到相同的异常。 – Phil