From 6bf72e36553878d4a6b024a111efd9763c9595f1 Mon Sep 17 00:00:00 2001 From: "bryan.zhang" Date: Tue, 27 Feb 2018 15:18:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89parser=E7=9A=84=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/core/FlowExecutor.java | 21 ++++++++++++++++--- .../liteflow/parser/ClassXmlFlowParser.java | 11 ++++++++++ .../liteflow/test/TestCustomParser.java | 13 ++++++++++++ src/test/resources/spring-test.xml | 9 ++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/thebeastshop/liteflow/parser/ClassXmlFlowParser.java create mode 100644 src/test/java/com/thebeastshop/liteflow/test/TestCustomParser.java 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