]> git.basschouten.com Git - openhab-addons.git/commitdiff
[jsscripting] Add an alternative MIME type/alias (#13851)
authorFlorian Hotze <florianh_dev@icloud.com>
Mon, 5 Dec 2022 17:40:15 +0000 (18:40 +0100)
committerGitHub <noreply@github.com>
Mon, 5 Dec 2022 17:40:15 +0000 (18:40 +0100)
The alternative MIME type text/javascript is also used by Nashorn, therefore we add the same extension as for the main MIME type.
The alias is introduced to simplify the usage in SCRIPT transformation profiles.

* Fix syntax problems in the bndtools file
* Add null check to avoid potential NPE
  In some cases during testing, a NPE occured, this should solve it.

Signed-off-by: Florian Hotze <florianh_dev@icloud.com>
bundles/org.openhab.automation.jsscripting/bnd.bnd
bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/GraalJSScriptEngineFactory.java
bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/OpenhabGraalJSScriptEngine.java

index 47c2bad3c8d92c94cedb9d260620d56aa61c2437..e54714acbbbec442e16a18b12d7461470648bfc1 100644 (file)
@@ -1,9 +1,10 @@
 Bundle-SymbolicName: ${project.artifactId}
 DynamicImport-Package: *
 Import-Package: org.openhab.core.automation.module.script,javax.management,javax.script,javax.xml.datatype,javax.xml.stream;version="[1.0,2)",org.osgi.framework;version="[1.8,2)",org.slf4j;version="[1.7,2)"
-Require-Capability: osgi.extender;
+Require-Capability: 
+    osgi.extender:=
       filter:="(osgi.extender=osgi.serviceloader.processor)",
-    osgi.serviceloader;
+    osgi.serviceloader:=
       filter:="(osgi.serviceloader=org.graalvm.polyglot.impl.AbstractPolyglotImpl)";
       cardinality:=multiple
 
index 31c69745eb29003d9dc531383572a37af4177d35..16d0625f0932301ffd3fff9f1508ca3909fa305e 100644 (file)
@@ -40,11 +40,14 @@ import org.osgi.service.component.annotations.Reference;
 public final class GraalJSScriptEngineFactory implements ScriptEngineFactory {
     private static final String CFG_INJECTION_ENABLED = "injectionEnabled";
     private static final String INJECTION_CODE = "Object.assign(this, require('openhab'));";
-    private final JSDependencyTracker jsDependencyTracker;
     private boolean injectionEnabled = true;
 
     public static final String MIME_TYPE = "application/javascript;version=ECMAScript-2021";
+    private static final String ALT_MIME_TYPE = "text/javascript;version=ECMAScript-2021";
+    private static final String ALIAS = "graaljs";
+
     private final JSScriptServiceUtil jsScriptServiceUtil;
+    private final JSDependencyTracker jsDependencyTracker;
 
     @Activate
     public GraalJSScriptEngineFactory(final @Reference JSScriptServiceUtil jsScriptServiceUtil,
@@ -68,7 +71,7 @@ public final class GraalJSScriptEngineFactory implements ScriptEngineFactory {
         // scriptTypes.addAll(graalJSEngineFactory.getMimeTypes());
         // scriptTypes.addAll(graalJSEngineFactory.getExtensions());
 
-        return List.of(MIME_TYPE);
+        return List.of(MIME_TYPE, ALT_MIME_TYPE, ALIAS);
     }
 
     @Override
index cf1c45464e90a4dd073c931ad60e1bda14485dfb..d870f5983292b4cbf2d9f3c4ff9df5c7ae68328e 100644 (file)
@@ -179,6 +179,9 @@ public class OpenhabGraalJSScriptEngine
         }
 
         ScriptContext ctx = delegate.getContext();
+        if (ctx == null) {
+            throw new IllegalStateException("Failed to retrieve script context");
+        }
 
         // these are added post-construction, so we need to fetch them late
         this.engineIdentifier = (String) ctx.getAttribute(CONTEXT_KEY_ENGINE_IDENTIFIER);