2016-05-31 42 views
5

Próbuję użyć ScriptEngineManager i ScriptEngine, aby wykonać kod JavaScript z Javą. Używam Java 8 Wykonuję ten kod pod Karaf OSGi.ScriptEngineManager i ScriptEngine nie mogą być załadowane w Karaf OSGi (Nashorn nie znaleziony)

W przykładzie użyłem działa dobrze w próbce klasy Java, ale pakowanie go w wiązce daje mi ten błąd ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not found

Kiedy patrzę na nagłówkach wiązki, widzę, że przywóz bundle javax.script, Pakiet z nazwanych klas, ale wydaje się, że (nashorn) dostawca nie został znaleziony.

Dzięki

Odpowiedz

6

Go złożyć etc/config.properties (znajduje się wewnątrz instalacji Karaf), znajdź właściwość konfiguracji org.osgi.framework.bootdelegation i dodać jdk.nashorn. * Do niego. Pełna konfiguracja będzie tak:

org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,sun.*,jdk.nashorn.* 

Bug jest zgłaszane do Karaf społeczności.

Edytuj: Jeśli w swoich testach użyjesz Pax Exam Container 4.x dla Karaf, nie zapomnij dodać org.ops4j.pax.exam.CoreOptions.bootDelegationPackage("jdk.nashorn.*") do konfiguracji swojego pojemnika testowego.

0

Musisz upewnić się, że pakiet czy system faktycznie wyeksportować te pakiety w pytaniu:

Więc albo zainstalować odpowiedni pakiet, albo trzeba dostosować na eksport pakietu systemowego, w takim przypadku edytuj właściwości jre.properties i upewnij się, że dany pakiet jest eksportowany z pakietu systemowego.