2016-05-31 8 views
5

Ich versuche ScriptEngineManager und ScriptEngine zu verwenden, um etwas JavaScript-Code mit Java auszuführen. Ich benutze Java 8 Ich führe diesen Code unter Karaf OSGi aus.ScriptEngineManager und ScriptEngine können nicht in Karaf OSGi geladen werden (Nashorn nicht gefunden)

Das Beispiel I funktionieren gut in einer Probe verwendet Java-Klasse, aber es in einem Bündel Verpackung gibt mir diesen Fehler ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not found

Wenn ich auf die Header des Bündels schauen, wie ich sehe, dass das Bündel Importe javax.script, das Paket von den genannten Klassen, aber es scheint, dass (nashorn) der Provider nicht gefunden wird.

Dank

Antwort

6

Go etc/config.properties (befindet sich innerhalb von Karaf Installation) einzureichen, finden Konfigurationseigenschaft org.osgi.framework.bootdelegation und jdk.nashorn hinzuzufügen. * Zu. Komplette Konfiguration wird wie folgt sein:

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 zu Karaf Community gemeldet wird.

bearbeiten: Wenn Sie Pax Exam Container 4.x für Karaf in Ihren Tests verwenden dann vergessen Sie nicht org.ops4j.pax.exam.CoreOptions.bootDelegationPackage("jdk.nashorn.*") an der Konfiguration Ihres Testbehälter hinzuzufügen.

0

Sie werden sicher, dass Sie ein Bündel machen müssen oder das System haben, um tatsächlich die Pakete in Frage zu exportieren:

Also entweder das entsprechende Paket installieren, oder Sie müssen sich auf die Exporte zwicken des Systempakets bearbeiten Sie in diesem Fall die Datei jre.properties und stellen Sie sicher, dass das fragliche Paket aus dem Systempaket exportiert wird.