From 9ec569bf8ce02d55fd8e0c71194d8cd08728c71f Mon Sep 17 00:00:00 2001
From: gaibu <1016771049@qq.com>
Date: Sun, 10 Sep 2023 09:48:56 +0800
Subject: [PATCH] =?UTF-8?q?BUGFIX=20#I7ZMVM=20=E4=B8=80=E4=B8=AA=20node=20?=
=?UTF-8?q?=E5=90=8C=E6=97=B6=E8=A6=86=E7=9B=96=20isContinueOnError=20?=
=?UTF-8?q?=E5=92=8C=20isEnd=20=E5=9C=BA=E6=99=AF=E7=9A=84=20bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../yomahub/liteflow/flow/element/Node.java | 7 ++++++-
.../test/component/FlowExecutorTest.java | 8 +++++++
.../liteflow/test/component/cmp1/ICmp.java | 21 +++++++++++++++++++
.../liteflow/test/component/cmp1/JCmp.java | 10 +++++++++
.../liteflow/test/component/cmp1/KCmp.java | 10 +++++++++
.../src/test/resources/component/flow.el.xml | 7 +++++++
6 files changed, 62 insertions(+), 1 deletion(-)
create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ICmp.java
create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/JCmp.java
create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/KCmp.java
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java
index 8410682f0..5d90e3c16 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java
@@ -154,8 +154,13 @@ public class Node implements Executable, Cloneable, Rollbackable{
throw e;
}
catch (Exception e) {
+ // 如果组件覆盖了isEnd方法,或者在在逻辑中主要调用了setEnd(true)的话,流程就会立马结束
+ if (instance.isEnd()) {
+ String errorInfo = StrUtil.format("[{}] lead the chain to end", instance.getDisplayName());
+ throw new ChainEndException(errorInfo);
+ }
// 如果组件覆盖了isContinueOnError方法,返回为true,那即便出了异常,也会继续流程
- if (instance.isContinueOnError()) {
+ else if (instance.isContinueOnError()) {
String errorMsg = StrUtil.format("component[{}] cause error,but flow is still go on", id);
LOG.error(errorMsg);
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java
index 1914ceeba..c3f0ab0a5 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java
@@ -83,4 +83,12 @@ public class FlowExecutorTest extends BaseTest {
Assertions.assertEquals("g", response.getExecuteStepStr());
}
+ // 测试setIsEnd如果为true,continueError也为true,那不应该continue了,并且都在同一个 cmp 中
+ @Test
+ public void testSetIsEnd3() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain8", 10);
+ Assertions.assertTrue(response.isSuccess());
+ Assertions.assertEquals("i", response.getExecuteStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ICmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ICmp.java
new file mode 100644
index 000000000..e1ed1fd1f
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ICmp.java
@@ -0,0 +1,21 @@
+package com.yomahub.liteflow.test.component.cmp1;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class ICmp extends NodeComponent {
+ @Override
+ public void process() throws Exception {
+ System.out.println("process i");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public boolean isContinueOnError() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnd() {
+ return true;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/JCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/JCmp.java
new file mode 100644
index 000000000..30545d3da
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/JCmp.java
@@ -0,0 +1,10 @@
+package com.yomahub.liteflow.test.component.cmp1;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class JCmp extends NodeComponent {
+ @Override
+ public void process() throws Exception {
+ System.out.println("process j");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/KCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/KCmp.java
new file mode 100644
index 000000000..de1533d39
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/KCmp.java
@@ -0,0 +1,10 @@
+package com.yomahub.liteflow.test.component.cmp1;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class KCmp extends NodeComponent {
+ @Override
+ public void process() throws Exception {
+ System.out.println("process k");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/component/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/component/flow.el.xml
index 5adc92341..5c83c32fe 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/component/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/component/flow.el.xml
@@ -9,6 +9,9 @@
+
+
+
@@ -38,4 +41,8 @@
THEN(g, h);
+
+
+ THEN(i, j, k);
+
\ No newline at end of file