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