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