diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml
index 98ec3f71..ec7f5303 100644
--- a/powerjob-server/pom.xml
+++ b/powerjob-server/pom.xml
@@ -267,6 +267,19 @@
${swagger.version}
+
+
+ org.codehaus.groovy
+ groovy-jsr223
+ 3.0.10
+
+
+
+ org.codehaus.groovy
+ groovy-json
+ 3.0.10
+
+
\ No newline at end of file
diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluator.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/GroovyEvaluator.java
similarity index 87%
rename from powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluator.java
rename to powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/GroovyEvaluator.java
index 5033121b..4fe6e80a 100644
--- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluator.java
+++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/GroovyEvaluator.java
@@ -14,9 +14,9 @@ import javax.script.ScriptEngineManager;
*/
@Slf4j
@Component
-public class JavaScriptEvaluator implements Evaluator {
+public class GroovyEvaluator implements Evaluator {
- private static final ScriptEngine ENGINE = new ScriptEngineManager().getEngineByName("nashorn");
+ private static final ScriptEngine ENGINE = new ScriptEngineManager().getEngineByName("groovy");
@Override
diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/hanlder/impl/DecisionNodeHandler.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/hanlder/impl/DecisionNodeHandler.java
index fe4c7fda..a776779b 100644
--- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/hanlder/impl/DecisionNodeHandler.java
+++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/hanlder/impl/DecisionNodeHandler.java
@@ -10,7 +10,7 @@ import tech.powerjob.common.enums.WorkflowNodeType;
import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.model.PEWorkflowDAG;
import tech.powerjob.common.serialize.JsonUtils;
-import tech.powerjob.server.core.evaluator.JavaScriptEvaluator;
+import tech.powerjob.server.core.evaluator.GroovyEvaluator;
import tech.powerjob.server.core.workflow.algorithm.WorkflowDAG;
import tech.powerjob.server.core.workflow.algorithm.WorkflowDAGUtils;
import tech.powerjob.server.core.workflow.hanlder.ControlNodeHandler;
@@ -26,7 +26,7 @@ import java.util.*;
@Component
public class DecisionNodeHandler implements ControlNodeHandler {
- private final JavaScriptEvaluator javaScriptEvaluator = new JavaScriptEvaluator();
+ private final GroovyEvaluator groovyEvaluator = new GroovyEvaluator();
/**
* 处理判断节点
@@ -45,7 +45,7 @@ public class DecisionNodeHandler implements ControlNodeHandler {
});
Object result;
try {
- result = javaScriptEvaluator.evaluate(script, wfContext);
+ result = groovyEvaluator.evaluate(script, wfContext);
} catch (Exception e) {
log.error("[Workflow-{}|{}]failed to evaluate decision node,nodeId:{}", wfInstanceInfo.getWorkflowId(), wfInstanceInfo.getWfInstanceId(), node.getNodeId(), e);
throw new PowerJobException("can't evaluate decision node!");
diff --git a/powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluatorTest.java b/powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/GroovyEvaluatorTest.java
similarity index 69%
rename from powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluatorTest.java
rename to powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/GroovyEvaluatorTest.java
index e5fb58be..27938f0e 100644
--- a/powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/JavaScriptEvaluatorTest.java
+++ b/powerjob-server/powerjob-server-starter/src/test/java/tech/powerjob/server/core/evaluator/GroovyEvaluatorTest.java
@@ -11,11 +11,11 @@ import java.util.HashMap;
/**
* @author Echo009
- * @since 2021/12/10
+ * @since 2022/04/13
*/
-public class JavaScriptEvaluatorTest {
+public class GroovyEvaluatorTest {
- private final JavaScriptEvaluator javaScriptEvaluator = new JavaScriptEvaluator();
+ private final GroovyEvaluator groovyEvaluator = new GroovyEvaluator();
private final HashMap SIMPLE_CONTEXT = new HashMap<>();
@@ -44,41 +44,36 @@ public class JavaScriptEvaluatorTest {
@Test
public void testSimpleEval1() {
- Object res = javaScriptEvaluator.evaluate("var x = false; x;", null);
+ Object res = groovyEvaluator.evaluate("var x = false; x;", null);
Assert.assertEquals(false, res);
}
@Test
public void testSimpleEval2() {
- Object res = javaScriptEvaluator.evaluate("var person = {name:'echo',tag:'y'}; person.name;", null);
- Assert.assertEquals("echo", res);
+ // inject simple context
+ Object res = groovyEvaluator.evaluate("var res = context.k3; res;", SIMPLE_CONTEXT);
+ Boolean s = JsonUtils.parseObjectUnsafe(res.toString(), Boolean.class);
+ Assert.assertEquals(false, s);
}
@Test
public void testSimpleEval3() {
- // inject simple context
- Object res = javaScriptEvaluator.evaluate("var res = context.k3; res;", SIMPLE_CONTEXT);
- Boolean s = JsonUtils.parseObjectUnsafe(res.toString(), Boolean.class);
- Assert.assertEquals(false, s);
- }
-
- @Test
- public void testSimpleEval4() {
- Object res = javaScriptEvaluator.evaluate("var res = JSON.parse(context.k3); res == false;", SIMPLE_CONTEXT);
+ Object res = groovyEvaluator.evaluate("var res = new groovy.json.JsonSlurper().parseText(context.k3); res == false;", SIMPLE_CONTEXT);
Assert.assertEquals(true, res);
}
+
@Test
public void testComplexEval1() {
// array
- Object res = javaScriptEvaluator.evaluate("var res = JSON.parse(context.array); res[0] == 1;", COMPLEX_CONTEXT);
+ Object res = groovyEvaluator.evaluate("var res = new groovy.json.JsonSlurper().parseText(context.array) ; res[0] == 1;", COMPLEX_CONTEXT);
Assert.assertEquals(true, res);
// map
- res = javaScriptEvaluator.evaluate("var map = JSON.parse(context.map); var e1 = map.e1; e1.value ",COMPLEX_CONTEXT);
+ res = groovyEvaluator.evaluate("var map = new groovy.json.JsonSlurper().parseText(context.map); var e1 = map.e1; e1.value ",COMPLEX_CONTEXT);
Assert.assertEquals(1,res);
// object
- res = javaScriptEvaluator.evaluate("var e3 = JSON.parse(context.obj); var e1 = e3.sub.sub; e1.value ",COMPLEX_CONTEXT);
+ res = groovyEvaluator.evaluate("var e3 = new groovy.json.JsonSlurper().parseText(context.obj); var e1 = e3.sub.sub; e1.value ",COMPLEX_CONTEXT);
Assert.assertEquals(1,res);
}