diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java b/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java
new file mode 100644
index 000000000..9876180e0
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.context;
+
+import com.yomahub.liteflow.annotation.AliasFor;
+
+import java.lang.annotation.*;
+
+/**
+ * @description 用于标注上下文bean的别名,以便在脚本或者组件中通过别名来获取上下文对象
+ * @since 2.9.7
+ * @author Tingliang Wang
+ * @createTime 2023/2/6 15:06
+ * @update: [序号][日期YYYY-MM-DD] [更改人姓名][变更描述]
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface ContextBean {
+ @AliasFor("name")
+ String value() default "";
+
+ @AliasFor("value")
+ String name() default "";
+
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java
index fced63a9f..cce335465 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java
@@ -3,6 +3,8 @@ package com.yomahub.liteflow.script.jsr223;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.annotation.util.AnnoUtil;
+import com.yomahub.liteflow.context.ContextBean;
import com.yomahub.liteflow.exception.LiteFlowException;
import com.yomahub.liteflow.script.ScriptBeanManager;
import com.yomahub.liteflow.script.ScriptExecuteWrap;
@@ -16,6 +18,7 @@ import org.slf4j.LoggerFactory;
import javax.script.*;
import java.util.Map;
+import java.util.Optional;
/**
* JSR223 script engine的统一实现抽象类
@@ -49,7 +52,7 @@ public abstract class JSR223ScriptExecutor implements ScriptExecutor {
CompiledScript compiledScript = ((Compilable) scriptEngine).compile(convertScript(script));
compiledScriptMap.put(nodeId, compiledScript);
}catch (Exception e){
- String errorMsg = StrUtil.format("script loading error for node[{}], error msg:{}", nodeId, e.getMessage());
+ String errorMsg = StrUtil.format("script loading error for node[{}], error msg:{}", nodeId, e);
throw new ScriptLoadException(errorMsg);
}
@@ -71,7 +74,13 @@ public abstract class JSR223ScriptExecutor implements ScriptExecutor {
//比如你的自定义上下文为AbcContext,那么key就为:abcContext
//这里不统一放一个map的原因是考虑到有些用户会调用上下文里的方法,而不是参数,所以脚本语言的绑定表里也是放多个上下文
DataBus.getContextBeanList(wrap.getSlotIndex()).forEach(o -> {
- String key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ ContextBean contextBean = AnnoUtil.getAnnotation(o.getClass(),ContextBean.class);
+ String key;
+ if(contextBean !=null && contextBean.value().trim().length()>0){
+ key = contextBean.value();
+ }else{
+ key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ }
bindings.put(key, o);
});
diff --git a/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java b/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java
index 1ca38722e..88be9ae4f 100644
--- a/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java
+++ b/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java
@@ -3,6 +3,8 @@ package com.yomahub.liteflow.script.graaljs;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.annotation.util.AnnoUtil;
+import com.yomahub.liteflow.context.ContextBean;
import com.yomahub.liteflow.script.ScriptBeanManager;
import com.yomahub.liteflow.script.ScriptExecuteWrap;
import com.yomahub.liteflow.script.ScriptExecutor;
@@ -57,7 +59,13 @@ public class GraalJavaScriptExecutor implements ScriptExecutor {
//比如你的自定义上下文为AbcContext,那么key就为:abcContext
//这里不统一放一个map的原因是考虑到有些用户会调用上下文里的方法,而不是参数,所以脚本语言的绑定表里也是放多个上下文
DataBus.getContextBeanList(wrap.getSlotIndex()).forEach(o -> {
- String key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ ContextBean contextBean = AnnoUtil.getAnnotation(o.getClass(),ContextBean.class);
+ String key;
+ if(contextBean !=null && contextBean.value().trim().length()>0){
+ key = contextBean.value();
+ }else{
+ key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ }
bindings.putMember(key, o);
});
diff --git a/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java b/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java
index 2f56af3de..4b55f80aa 100644
--- a/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java
+++ b/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java
@@ -8,6 +8,8 @@ import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressLoader;
import com.ql.util.express.ExpressRunner;
import com.ql.util.express.InstructionSet;
+import com.yomahub.liteflow.annotation.util.AnnoUtil;
+import com.yomahub.liteflow.context.ContextBean;
import com.yomahub.liteflow.script.ScriptBeanManager;
import com.yomahub.liteflow.script.ScriptExecuteWrap;
import com.yomahub.liteflow.slot.DataBus;
@@ -69,7 +71,13 @@ public class QLExpressScriptExecutor implements ScriptExecutor {
//比如你的自定义上下文为AbcContext,那么key就为:abcContext
//这里不统一放一个map的原因是考虑到有些用户会调用上下文里的方法,而不是参数,所以脚本语言的绑定表里也是放多个上下文
DataBus.getContextBeanList(wrap.getSlotIndex()).forEach(o -> {
- String key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ ContextBean contextBean = AnnoUtil.getAnnotation(o.getClass(),ContextBean.class);
+ String key;
+ if(contextBean !=null && contextBean.value().trim().length()>0){
+ key = contextBean.value();
+ }else{
+ key = StrUtil.lowerFirst(o.getClass().getSimpleName());
+ }
context.put(key, o);
});
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/LiteFlowScriptContextbeanGraaljsTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/LiteFlowScriptContextbeanGraaljsTest.java
new file mode 100644
index 000000000..43f169a89
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/LiteFlowScriptContextbeanGraaljsTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.graaljs.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.graaljs.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.graaljs.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.graaljs.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanGraaljsTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.graaljs.contextbean.cmp","com.yomahub.liteflow.test.script.graaljs.contextbean.bean"})
+public class LiteFlowScriptContextbeanGraaljsTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals("order1", orderContext.getOrderNo());
+ Assert.assertEquals("d", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..e2a341cbc
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.graaljs.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..7ac1738fe
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.graaljs.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..48d87ea47
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.graaljs.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..ba361ed4e
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/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.graaljs.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..2c40cbfce
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.graaljs.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..f15cdca77
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.graaljs.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..41a63e4ea
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/LiteFlowScriptContextbeanGroovyELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/LiteFlowScriptContextbeanGroovyELTest.java
new file mode 100644
index 000000000..ad0937f28
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/LiteFlowScriptContextbeanGroovyELTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.groovy.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.groovy.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.groovy.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.groovy.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanGroovyELTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.groovy.contextbean.cmp","com.yomahub.liteflow.test.script.groovy.contextbean.bean"})
+public class LiteFlowScriptContextbeanGroovyELTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals("order1", orderContext.getOrderNo());
+ Assert.assertEquals("sign1", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..0f2e7cd43
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.groovy.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..54b59dac3
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.groovy.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..40273204e
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.groovy.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..55d061103
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/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.groovy.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..055805673
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.groovy.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..bff3429c1
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.groovy.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..9ca064402
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/LiteFlowScriptContextbeanJavaScriptTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/LiteFlowScriptContextbeanJavaScriptTest.java
new file mode 100644
index 000000000..5e8b3ec10
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/LiteFlowScriptContextbeanJavaScriptTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.javascript.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.javascript.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.javascript.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.javascript.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanJavaScriptTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.javascript.contextbean.cmp","com.yomahub.liteflow.test.script.javascript.contextbean.bean"})
+public class LiteFlowScriptContextbeanJavaScriptTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals("order1", orderContext.getOrderNo());
+ Assert.assertEquals("sign1", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..cb88f3ec7
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.javascript.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..33e5b3d36
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.javascript.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..95bf9a4a6
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.javascript.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..215232b78
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/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.javascript.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..f981f550b
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.javascript.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..4c5dbda67
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.javascript.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..8a51ae86f
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/LiteFlowScriptContextbeanLuaTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/LiteFlowScriptContextbeanLuaTest.java
new file mode 100644
index 000000000..f5630d6f7
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/LiteFlowScriptContextbeanLuaTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.lua.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.lua.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.lua.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.lua.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanLuaTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.lua.contextbean.cmp","com.yomahub.liteflow.test.script.lua.contextbean.bean"})
+public class LiteFlowScriptContextbeanLuaTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals(30, orderContext.getOrderType());
+ Assert.assertEquals("d", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..01e76b3aa
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.lua.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..75985749f
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.lua.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..6291a2914
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.lua.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..5bdab2bf9
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/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.lua.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..51d86d97c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.lua.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..3731aa087
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.lua.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..ff00eb925
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ 5) then
+ b=5
+ else
+ b=2
+ end
+ order:setOrderType(a*b)
+ checkContext:setSign(_meta:get("nodeId"))
+ order2Context:setOrderNo("order2")
+ ]]>
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/LiteFlowScriptContextbeanPythonTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/LiteFlowScriptContextbeanPythonTest.java
new file mode 100644
index 000000000..b502f34ef
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/LiteFlowScriptContextbeanPythonTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.python.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.python.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.python.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.python.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanPythonTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.python.contextbean.cmp","com.yomahub.liteflow.test.script.python.contextbean.bean"})
+public class LiteFlowScriptContextbeanPythonTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals(30, orderContext.getOrderType());
+ Assert.assertEquals("d", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..488d0bcdf
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.python.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..d6e3fea89
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.python.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..77ebd20f9
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.python.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..16595cee0
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/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.python.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..f1e2be7d6
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.python.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..f4d858c5d
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.python.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..c87f1650b
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ 5:
+ b=5
+ print 'hello'
+ else:
+ print 'hi'
+ order.setOrderType(a*b)
+ checkContext.setSign(_meta.get("nodeId"))
+ order2Context.setOrderNo("order2")
+ ]]>
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/LiteFlowScriptContextbeanQLExpressTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/LiteFlowScriptContextbeanQLExpressTest.java
new file mode 100644
index 000000000..8dc77af51
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/LiteFlowScriptContextbeanQLExpressTest.java
@@ -0,0 +1,55 @@
+package com.yomahub.liteflow.test.script.qlexpress.contextbean;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.script.qlexpress.contextbean.bean.CheckContext;
+import com.yomahub.liteflow.test.script.qlexpress.contextbean.bean.Order2Context;
+import com.yomahub.liteflow.test.script.qlexpress.contextbean.bean.OrderContext;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@TestPropertySource(value = "classpath:/contextbean/application.properties")
+@SpringBootTest(classes = LiteFlowScriptContextbeanQLExpressTest.class)
+@EnableAutoConfiguration
+@ComponentScan({"com.yomahub.liteflow.test.script.qlexpress.contextbean.cmp","com.yomahub.liteflow.test.script.qlexpress.contextbean.bean"})
+public class LiteFlowScriptContextbeanQLExpressTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
+ @Test
+ public void testContextBean1() throws Exception{
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", OrderContext.class, CheckContext.class, Order2Context.class);
+ Assert.assertTrue(response.isSuccess());
+ OrderContext orderContext = response.getContextBean(OrderContext.class);
+ CheckContext checkContext = response.getContextBean(CheckContext.class);
+ Order2Context order2Context = response.getContextBean(Order2Context.class);
+ Assert.assertEquals(6, orderContext.getOrderType());
+ Assert.assertEquals("d", checkContext.getSign());
+ Assert.assertEquals("order2", order2Context.getOrderNo());
+ }
+
+ @Test
+ public void testContextBean2() throws Exception{
+ OrderContext orderContext = new OrderContext();
+ orderContext.setOrderNo("order1");
+ CheckContext checkContext = new CheckContext();
+ checkContext.setSign("sign1");
+ Order2Context orderContext2 = new Order2Context();
+ orderContext2.setOrderNo("order2");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, orderContext, checkContext, orderContext2);
+ Assert.assertTrue(response.isSuccess());
+
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/CheckContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/CheckContext.java
new file mode 100644
index 000000000..24b1e24a8
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/CheckContext.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.test.script.qlexpress.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+@ContextBean
+public class CheckContext {
+
+ private String sign;
+
+ private int randomId;
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public int getRandomId() {
+ return randomId;
+ }
+
+ public void setRandomId(int randomId) {
+ this.randomId = randomId;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/Order2Context.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/Order2Context.java
new file mode 100644
index 000000000..86f797b09
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/Order2Context.java
@@ -0,0 +1,36 @@
+package com.yomahub.liteflow.test.script.qlexpress.contextbean.bean;
+
+import java.util.Date;
+
+public class Order2Context {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/OrderContext.java
new file mode 100644
index 000000000..3ec3d9d77
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/bean/OrderContext.java
@@ -0,0 +1,39 @@
+package com.yomahub.liteflow.test.script.qlexpress.contextbean.bean;
+
+import com.yomahub.liteflow.context.ContextBean;
+
+import java.util.Date;
+
+@ContextBean("order")
+public class OrderContext {
+
+ private String orderNo;
+
+ private int orderType;
+
+ private Date createTime;
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public int getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(int orderType) {
+ this.orderType = orderType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/ACmp.java
new file mode 100644
index 000000000..4731ae511
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/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.qlexpress.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("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-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/BCmp.java
new file mode 100644
index 000000000..3cece59e7
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/BCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.qlexpress.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/CCmp.java
new file mode 100644
index 000000000..75bd23d9c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/contextbean/cmp/CCmp.java
@@ -0,0 +1,21 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.script.qlexpress.contextbean.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/application.properties
new file mode 100644
index 000000000..25ff2335a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/application.properties
@@ -0,0 +1 @@
+liteflow.rule-source=contextbean/flow.xml
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/flow.xml
new file mode 100644
index 000000000..73be4564c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/resources/contextbean/flow.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THEN(a,b,c,d);
+
+
+
+ THEN(a,b,c,e);
+
+
+
\ No newline at end of file