关键字
1 if/else/elseif
1.1 if
- if定义条件控制,满足条件才会执行if下的子节点。
1.1.1 父节点
- step
- process
- filter
- foreach
- while
- if
- else
- elseif
1.1.2 子节点
- step(process中)
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
1.1.3属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
condition | if判断条件表达式 | string | 判断条件表达式比如 sta[i]=0 |
1.1.4 规则
- 属性condition为必配属性,其他为可选项;
- if子节点是根据if的属性condition进行条件判断执行if下的子节点;if的子节点是根据实际需求配置,子节点的配置规则可参考相应子节点的章节说明;
1.1.5 示例
<filter type="in" ref="publicFilter">
<field tag="abc" value="test" />
<if condition="${abc=='test'}">
<field tag="result" value="bad"/>
</if>
<elseif condition="${abc=='good'}">
<field tag="result" value="1"/>
</elseif>
<else>
<field tag="result" value="perfect"/>
</else>
</filter>
<log value="${result}"/>
输出结构:
1.2 else
- else配合if一起使用,不满足if条件时,执行else下的子节点。
1.2.1 父节点
- filter
- foreach
- while
- if
- else
- elseif
1.2.2 子节点
- step(process中)
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
1.2.3 属性
- 无
1.2.4 规则
- 属性一般无,else配合if使用,if条件判断否定的结果就会执行else;
- else子节点是根据if的属性condition进行条件判断,不符合条件,执行else下的子节点;else的子节点是根据实际需求配置,子节点的配置规则可参考相应子节点的章节说明;
1.2.5 示例
<filter type="in" ref="publicFilter">
<field tag="abc" value="good" />
<if condition="${abc=='test'}">
<field tag="result" value="bad"/>
</if>
<elseif condition="${abc=='good'}">
<field tag="result" value="1"/>
</elseif>
<else>
<field tag="result" value="perfect"/>
</else>
</filter>
<log value="${result}"/>
输出结果:
1.3 elseif
- elseif配合if使用,当满足elseif的条件时,执行elseif下的子节点。
1.3.1 父节点
- filter
- foreach
- while
- if
- else
- elseif
1.3.2 子节点
- step(process中)
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
1.3.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
condition | elseif判断条件表达式 | string | 判断条件表达式比如 sta[i]=0 |
1.3.4规则
- 属性condition为必配属性,其他为可选项;
- if子节点是根据if的属性condition进行条件判断执行if下的子节点;if的子节点是根据实际需求配置,子节点的配置规则可参考相应子节点的章节说明;
1.3.5 示例
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.brilliance.com.cn/interface"
xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
<interface id="demo" version="2.0" type="server" defaultScope="transaction">
<transaction id="bean" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<field tag="a" value="yn" />
<if condition="${a=='yes'}">
<log value="the value of a is yes" />
</if>
<elseif condition="${a=='no'}">
<log value="the value of a is no" />
</elseif>
<else>
<log value="check out !!!" />
</else>
</filter>
</step>
</transaction>
</interface>
</root>
输出结果:
2 foreach
- 定义循环控制,只有当控制条件为真的时候其子节点才正确执行,通过配置起始条件,结束条件,变量变化步长,附加条件等,让子节点的操作循环进行处理。
2.1 父节点
- step
- filter
- foreach
- while
- if
- else
- elseif
2.2 子节点
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
2.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
tag | 标识 | string | 循环的标识 |
begin | 循环开始条件,默认为0 | string | 循环从0开始 |
end | 循环结束条件 | string | 循环结束条件比如子节点的个数 |
condition | 循环附加条件 | String | ${i>5} |
2.4 规则
- 属性begin,end为必配属性,其他为可选项;
- foreach子节点是根据foreach的属性进行条件判断循环执行foreach下的子节点;foreach的子节点是根据实际需求配置,子节点的配置规则可参考相应子节点的章节说明;
2.5 示例
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.brilliance.com.cn/interface"
xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
<interface id="demo" version="2.0" type="server" defaultScope="transaction">
<transaction id="bean" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<foreach tag="i" begin="0" end="5">
<log value="the value of i is ${i}" />
</foreach>
</filter>
</step>
</transaction>
</interface>
</root>
输出结果:
3 while
- 定义循环控制,只要当控制条件为真的时候其子节点才正确执行。
3.1 父节点
- lilter
- foreach
- while
- if
- else
- elseif
3.2 子节点
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
3.2 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
condition | 循环条件 | string | ${str!=null} |
3.4 示例
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.brilliance.com.cn/interface"
xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
<interface id="demo" version="2.0" type="server" defaultScope="transaction">
<transaction id="bean" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<while condition="${true}">
<!-- 休眠一秒钟 -->
<field value="${sleep(1000)}" />
</while>
</filter>
</step>
</transaction>
</interface>
</root>
输出结果:
4 break/continue
4.1 continue
(同break)
4.2 break
- 在foreach或者while节点中添加break功能。
4.2.1父节点
- foreach
- while
- if
- else
- elseif
4.2.2 子节点
- filter
- foreach
- while
- if
- else
- elseif
- import
- field
- convertor
- validator
4.2.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
condition | 循环条件 | string | ${str!=null} |
4.3 示例
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.brilliance.com.cn/interface"
xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
<interface id="demo" version="2.0" type="server" defaultScope="transaction">
<transaction id="bean" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<foreach tag="i" begin="0" end="5">
<if condition="${i==3}">
<break />
</if>
<log value="the value of i is ${i}" />
</foreach>
<foreach tag="i" begin="0" end="5">
<if condition="${i==3}">
<continue />
</if>
<log value="the value of i is ${i}" />
</foreach>
</filter>
</step>
</transaction>
</interface>
</root>
输出结果:
综合应用
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.brilliance.com.cn/interface"
xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
<interface id="demo" version="2.0" type="server" defaultScope="transaction">
<transaction id="bean" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<field tag="a" value="${0}" />
<foreach tag="i" begin="0" end="5">
<if condition="${i%2==0}">
<field tag="a" value="${a+i}" />
</if>
<else>
<field tag="a" value="${a+i+1}" />
</else>
</foreach>
<field value="${a}" />
</filter>
</step>
</transaction>
</interface>
</root>
输出结果:
5 validator
- validator中的condition属性值如果返回true,则表示交易继续执行;如果返回值为false,则直接跳入step id="exception"步骤中,作为异常处理。
5.1 父节点
- filter
- foreach
- while
- if
- else
- elseif
5.2 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
condition | EL表达式中的变量 | string | filter中字段的标识,作为key存入上下文; |
errorcode | 错误代码 | string | |
description | 错误描述 | String |
5.3 规则
- 属性condition为必配项,其他为可选项;condition的值为false表示校验不通过,会跳出交易,交易结束。
- 子节点argument为validator属性condition配置函数的参数,根据函数个数顺序进行配置;
- 如果校验失败,description会作为错误信息的描述信息返回;
5.4 示例
<validator id="isNotError" condition="${1==2}" errorcode="2" description="运算异常" />
6 import
- 定义其他在当前配置文件处可以引用的其他配置。
6.1 父节点
- transaction下所有的节点
6.2 子节点
- field:处理操作的操作域。
6.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
file | 引用的文件 | string | commons.xml |
ref | 引用的节点id | string |
6.4 规则
属性ref为必配项,其他为可选项,必须正确指定到imports中的定义的import的id属性;
如若在import下配置tag相同的field将会达到一个替换原有field的作用,配置tag不存在的field将无任何效果,以上说明只针对filter的type为in的情况
6.5 示例
<!--主配置-->
<filter type="in" ref="publicFilter">
<import file="cfg/etc/imports.xml" ref="1"/>
<field value="${strarray}" />
<field value="${strarray1}" />
</filter>
<!--imports.xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
<!-- 数据模型定义配置文件 -->
<imports>
<import id="1">
<field tag="strarray" value="123" />
<field tag="strarray1" value="${strarray}" />
</import>
</imports>
7 call
- call标签:表示可以在一个交易中调用子交易或者跳转到其他的交易。
7.1 父节点
- filter
7.2 子节点
- argument
7.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
tag | 内部变量名称 | string | tag=”abc” |
scope | 生命周期 | string | socpe=”step” |
type | 交易类型 | String | type=”sub” 作为子交易处理,子交易的异常可在父交易中捕获; type=”chain” 作为其他交易跳转,子交易完全独立父交易,无法捕获子交易异常; type=”sub_conn” 功能类似chain,但是子交易可以使用父交易的数据库连接, 保证是同一个连接. |
transactionName | 交易名称 | String | transactionName=”test” |
interfaceName | 接口名称 | String | interfaceName="blackclient” |
7.4 arugment属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
value | 参数值 | string | 传入convertor或validator方法中的参数值 |
description | 描述 | string | argument描述信息 |
7.5 call节点返回值
call节点其实就是调用子交易的一种方式。将交易处理原子化。
call节点会将接口返回值保存在tag里面。
<filter ref="publicFilter" type="in">
<call tag=”result” scope=”step” type=”chain” transactionName=”a”
interfaceName=”interface”/>
<!--接口是否执行成功-->
<field tag="succ" value="${result.success}" />
<!--接口返回的错误码-->
<field tag="retcode" value="${result.returnCode}" />
<!--接口返回的错误描述-->
<field tag="succ" value="${result.description}" />
<!--接口返回的信息-->
<field tag="succ" value="${result.content}" />
</filter>
8 log
- log标签:用来自定义业务实现中的日志输出
8.1 父节点
- step
- filter
- foreach
- while
- if
- else
- elseif
8.2 子节点
- 无
8.3 属性
属性 | 描述 | 值类型 | 示例 |
---|---|---|---|
value | 需要打印的内容 | string | 配置中的某个变量 |
level | 日志打印级别 | string | info/debug/error/trace |
8.4 规则
- 无
8.5 示例
<connection ref="fileConnection">
<property name="path" value="D:/test.txt" />
</connection>
<log value="file content is:${this}" level="info" />
<filter type="in" ref="fileFilter">
<field tag="fileSize" value="${getRecordSize()}" />
<foreach tag="i" end="${fileSize}" condition="${next()}">
<field tag="id" etag="0" />
<log value="the ID of line ${i+1} is:${id}" level="info" />
</foreach>
</filter>