一個類加載器從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