diff --git a/CHANGELOG.md b/CHANGELOG.md
index fbdf825..1206c3d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Changed
- Durable subscriptions (by @erwindon)
- Option to add client id
+- #105 changed Nashorn javascript engine to GraalVM JS.
## [1.5.0]
### Removed
diff --git a/pom.xml b/pom.xml
index 642f1e6..9e5db99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,6 +89,16 @@
jackson-databind
2.13.0
+
+ org.graalvm.js
+ js
+ 21.3.0
+
+
+ org.graalvm.js
+ js-scriptengine
+ 21.3.0
+
diff --git a/src/main/java/co/nordlander/a/A.java b/src/main/java/co/nordlander/a/A.java
index d750dab..a843fa2 100755
--- a/src/main/java/co/nordlander/a/A.java
+++ b/src/main/java/co/nordlander/a/A.java
@@ -147,6 +147,7 @@ public enum Protocol {
}
public static void main(String[] args) {
+ System.setProperty("polyglot.engine.WarnInterpreterOnly", "false");
A a = new A();
try { a.run(args); } catch (Exception e) {
e.printStackTrace();
diff --git a/src/main/java/co/nordlander/a/MessageDumpTransformer.java b/src/main/java/co/nordlander/a/MessageDumpTransformer.java
index 385cdfe..c8ef6e1 100644
--- a/src/main/java/co/nordlander/a/MessageDumpTransformer.java
+++ b/src/main/java/co/nordlander/a/MessageDumpTransformer.java
@@ -22,10 +22,9 @@
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import java.util.function.Predicate;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
+import javax.script.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
@@ -39,9 +38,19 @@
public class MessageDumpTransformer {
- protected ScriptEngineManager mgr = new ScriptEngineManager();
- protected ScriptEngine engine = mgr.getEngineByName("JavaScript");
+ protected ScriptEngineManager mgr;
+ protected ScriptEngine engine;
+ protected Bindings bindings;
protected Map context = new TreeMap<>();
+
+ public MessageDumpTransformer(){
+ mgr = new ScriptEngineManager();
+ engine = mgr.getEngineByName("js");
+ bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
+ bindings.put("polyglot.js.nashorn-compat", true);
+ bindings.put("polyglot.js.allowHostAccess", true);
+ bindings.put("polyglot.js.allowHostClassLookup", (Predicate) s -> true);
+ }
public MessageDump transformMessage(MessageDump msg, String script) throws ScriptException, IOException{
if (StringUtils.isBlank(script)) {
@@ -71,9 +80,9 @@ protected String toScript(final String script) throws IOException {
}
protected MessageDump doTransformMessage(MessageDump msg, String script) throws ScriptException{
- engine.put("msg", msg);
+ bindings.put("msg", msg);
for (Map.Entry entry : context.entrySet() ) {
- engine.put(entry.getKey(), entry.getValue());
+ bindings.put(entry.getKey(), entry.getValue());
}
engine.eval(script);
return msg;
diff --git a/src/test/java/co/nordlander/a/BaseTest.java b/src/test/java/co/nordlander/a/BaseTest.java
index fcb2d51..7a2baab 100644
--- a/src/test/java/co/nordlander/a/BaseTest.java
+++ b/src/test/java/co/nordlander/a/BaseTest.java
@@ -93,6 +93,8 @@ public abstract class BaseTest {
@Before
public void setupJMS() throws Exception {
+ System.setProperty("polyglot.engine.WarnInterpreterOnly", "false");
+
cf = getConnectionFactory();
connection = cf.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);