diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 18dc9504f..a6e482855 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -11,7 +11,6 @@ package com.yomahub.liteflow.core; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Tuple; -import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.*; import cn.hutool.crypto.digest.MD5; import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; @@ -217,16 +216,6 @@ public class FlowExecutor { } } - // 如果是ruleSource方式的,最后判断下有没有解析出来,如果没有解析出来则报错 - if (StrUtil.isBlank(liteflowConfig.getRuleSourceExtData()) - && MapUtil.isEmpty(liteflowConfig.getRuleSourceExtDataMap())) { - if (FlowBus.getChainMap().isEmpty()) { - String errMsg = StrUtil.format("no valid rule config found in rule path [{}]", - liteflowConfig.getRuleSource()); - throw new ConfigErrorException(errMsg); - } - } - // 执行钩子 if (isStart) { FlowInitHook.executeHook(); @@ -722,4 +711,4 @@ public class FlowExecutor { public AtomicBoolean getStartUpPhase() { return startUpPhase; } -} \ No newline at end of file +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java index 3105bc53e..94af15b2a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java @@ -226,8 +226,13 @@ public class ParserHelper { // 这样就不用去像之前的版本那样回归调用 // 同时也解决了不能循环依赖的问题 flowJsonObjectList.forEach(jsonObject -> { + JsonNode flowNode = jsonObject.get(FLOW); + if (flowNode == null || !flowNode.has(CHAIN)) { + return; + } + // 解析chain节点 - Iterator iterator = jsonObject.get(FLOW).get(CHAIN).elements(); + Iterator iterator = flowNode.get(CHAIN).elements(); // 先在元数据里放上chain while (iterator.hasNext()) { JsonNode innerJsonObject = iterator.next(); diff --git a/liteflow-core/src/main/resources/dtd/liteflow.dtd b/liteflow-core/src/main/resources/dtd/liteflow.dtd index d7927fd29..bcf79da2e 100644 --- a/liteflow-core/src/main/resources/dtd/liteflow.dtd +++ b/liteflow-core/src/main/resources/dtd/liteflow.dtd @@ -1,6 +1,6 @@ - + @@ -23,4 +23,4 @@ enable (true|false) #IMPLIED namespace CDATA #IMPLIED thread-pool-executor-class CDATA #IMPLIED - > \ No newline at end of file + > diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/base/NoChainELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/base/NoChainELSpringbootTest.java new file mode 100644 index 000000000..04ab4a9f4 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/base/NoChainELSpringbootTest.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.base; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +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 javax.annotation.Resource; + +/** + * springboot环境下没有chain的启动测试 + * + * @author Bryan.Zhang + */ +@TestPropertySource(value = "classpath:/base/noChain/application.properties") +@SpringBootTest(classes = NoChainELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({ "com.yomahub.liteflow.test.base.cmp" }) +public class NoChainELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testStartWithoutChain() { + Assertions.assertNotNull(flowExecutor); + Assertions.assertTrue(FlowBus.getChainMap().isEmpty()); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/application.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/application.properties new file mode 100644 index 000000000..51e9dd1a5 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=base/noChain/flow.el.xml diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/flow.el.xml new file mode 100644 index 000000000..ad11c9901 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/base/noChain/flow.el.xml @@ -0,0 +1,4 @@ + + + +