diff --git a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java index 8831592b9..4a3620f37 100644 --- a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java +++ b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java @@ -51,14 +51,17 @@ public class FlowExecutor { XmlFlowParser parser = null; for(String path : rulePath){ try { - if(isZKConfig(path)) { + if(isLocalConfig(path)) { + parser = new LocalXmlFlowParser(); + }else if(isZKConfig(path)){ if(StringUtils.isNotBlank(zkNode)) { parser = new ZookeeperXmlFlowParser(zkNode); }else { parser = new ZookeeperXmlFlowParser(); } - }else { - parser = new LocalXmlFlowParser(); + }else if(isClassConfig(path)) { + Class c = Class.forName(path); + parser = (XmlFlowParser)c.newInstance(); } parser.parseMain(path); } catch (Exception e) { @@ -75,6 +78,18 @@ public class FlowExecutor { return m.find(); } + private boolean isLocalConfig(String path) { + Pattern p = Pattern.compile("^[\\w\\/]+(\\/\\w+)*\\.xml$"); + Matcher m = p.matcher(path); + return m.find(); + } + + private boolean isClassConfig(String path) { + Pattern p = Pattern.compile("^\\w+(\\.\\w+)*$"); + Matcher m = p.matcher(path); + return m.find(); + } + public void reloadRule(){ init(); } diff --git a/src/main/java/com/thebeastshop/liteflow/parser/ClassXmlFlowParser.java b/src/main/java/com/thebeastshop/liteflow/parser/ClassXmlFlowParser.java new file mode 100644 index 000000000..692b47e03 --- /dev/null +++ b/src/main/java/com/thebeastshop/liteflow/parser/ClassXmlFlowParser.java @@ -0,0 +1,11 @@ +package com.thebeastshop.liteflow.parser; + +public abstract class ClassXmlFlowParser extends XmlFlowParser { + @Override + public void parseMain(String path) throws Exception { + String content = parseCustom(); + parse(content); + } + + public abstract String parseCustom(); +} diff --git a/src/test/java/com/thebeastshop/liteflow/test/TestCustomParser.java b/src/test/java/com/thebeastshop/liteflow/test/TestCustomParser.java new file mode 100644 index 000000000..652a90666 --- /dev/null +++ b/src/test/java/com/thebeastshop/liteflow/test/TestCustomParser.java @@ -0,0 +1,13 @@ +package com.thebeastshop.liteflow.test; + +import com.thebeastshop.liteflow.parser.ClassXmlFlowParser; + +public class TestCustomParser extends ClassXmlFlowParser { + + @Override + public String parseCustom() { + System.out.println("进入自定义parser,这里只做进入作用,不返回具体xml"); + return null; + } + +} diff --git a/src/test/resources/spring-test.xml b/src/test/resources/spring-test.xml index b5ad909fc..26ff8018a 100644 --- a/src/test/resources/spring-test.xml +++ b/src/test/resources/spring-test.xml @@ -28,4 +28,13 @@ 这个不配置就用默认的/lite-flow/flow节点 --> + + + \ No newline at end of file