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 225163b70..62071d45f 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 @@ -193,15 +193,10 @@ public class Node implements Executable, Cloneable, Rollbackable{ String errorInfo = StrUtil.format("[{}] lead the chain to end", instance.getDisplayName()); throw new ChainEndException(errorInfo); } - } - catch (ChainEndException e) { - throw e; - } - catch (Exception 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); + if (e instanceof ChainEndException) { + throw e; } // 如果组件覆盖了isContinueOnError方法,返回为true,那即便出了异常,也会继续流程 else if (getIsContinueOnErrorResult() || instance.isContinueOnError()) { diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/common/ScriptJavaxProCommonELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/common/ScriptJavaxProCommonELTest.java index cfb4caa83..e51d26e80 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/common/ScriptJavaxProCommonELTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/common/ScriptJavaxProCommonELTest.java @@ -40,4 +40,4 @@ public class ScriptJavaxProCommonELTest extends BaseTest { LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg"); Assertions.assertTrue(response.isSuccess()); } -} +} \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/ScriptJavaxProOverrideELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/ScriptJavaxProOverrideELTest.java new file mode 100644 index 000000000..2a445b586 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/ScriptJavaxProOverrideELTest.java @@ -0,0 +1,95 @@ +package com.yomahub.liteflow.test.script.javaxpro.override; + +import cn.hutool.core.util.BooleanUtil; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; + +@ExtendWith(SpringExtension.class) +@TestPropertySource(value = "classpath:/override/application.properties") +@SpringBootTest(classes = ScriptJavaxProOverrideELTest.class) +@EnableAutoConfiguration +@ComponentScan({ "com.yomahub.liteflow.test.script.javaxpro.override.cmp" }) +public class ScriptJavaxProOverrideELTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + //覆盖isAccess + @Test + public void testJavaxPro1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", 3, DefaultContext.class); + Assertions.assertEquals("a", response.getExecuteStepStr()); + } + + //覆盖isContinueOnError + @Test + public void testJavaxPro2() { + LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, DefaultContext.class); + Assertions.assertEquals("s2==>a", response.getExecuteStepStrWithoutTime()); + } + + //设置setIsEnd(true) + @Test + public void testJavaxPro3() { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", null, DefaultContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertNull(response.getCause()); + Assertions.assertEquals("a==>s3", response.getExecuteStepStrWithoutTime()); + } + + //覆盖beforeProcess和afterProcess + @Test + public void testJavaxPro4() { + LiteflowResponse response = flowExecutor.execute2Resp("chain4", null, DefaultContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>s4", response.getExecuteStepStrWithoutTime()); + DefaultContext context = response.getFirstContextBean(); + Assertions.assertTrue((Boolean) context.getData("before")); + Assertions.assertTrue((Boolean) context.getData("after")); + } + + //覆盖onSuccess + @Test + public void testJavaxPro5() { + LiteflowResponse response = flowExecutor.execute2Resp("chain5", null, DefaultContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>s5", response.getExecuteStepStrWithoutTime()); + DefaultContext context = response.getFirstContextBean(); + Assertions.assertTrue((Boolean) context.getData("successFlag")); + } + + //覆盖onError + @Test + public void testJavaxPro6() { + LiteflowResponse response = flowExecutor.execute2Resp("chain6", null, DefaultContext.class); + DefaultContext context = response.getFirstContextBean(); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("a==>s6", response.getExecuteStepStrWithoutTime()); + Assertions.assertNotNull(response.getCause()); + Assertions.assertTrue((Boolean) context.getData("errorFlag")); + Assertions.assertEquals("test error", context.getData("errorMsg")); + } + + //覆盖rollback + @Test + public void testJavaxPro7() { + LiteflowResponse response = flowExecutor.execute2Resp("chain7", null, DefaultContext.class); + DefaultContext context = response.getFirstContextBean(); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("s7==>b", response.getExecuteStepStrWithoutTime()); + Assertions.assertEquals("b==>s7", response.getRollbackStepStrWithoutTime()); + Assertions.assertTrue((Boolean) context.getData("rollbackFlag")); + } +} \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/ACmp.java new file mode 100644 index 000000000..7c39210a8 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/ACmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.script.javaxpro.override.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/BCmp.java new file mode 100644 index 000000000..06b809e8f --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/override/cmp/BCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.script.javaxpro.override.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + throw new RuntimeException("error"); + } + + @Override + public void rollback() throws Exception { + super.rollback(); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/application.properties new file mode 100644 index 000000000..f6d01a996 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=override/flow.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/flow.xml new file mode 100644 index 000000000..2ad9c86a7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/override/flow.xml @@ -0,0 +1,182 @@ + + + + + + 5; + } + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THEN(s1, a); + + + + THEN(s2, a); + + + + THEN(a, s3); + + + + THEN(a, s4); + + + + THEN(a, s5); + + + + THEN(a, s6); + + + + THEN(s7, b); + + \ No newline at end of file