接口主配置

​ 接口主配置主要完成的任务是接口的数据处理,业务逻辑实现,协议的解报组报等工作,一个接口的主要工作都取决于接口配置。我们可以在main目录下创建xml文件进行配置,本章内容就基础的配置对主接口进行介绍。

​ 配置顺序:

a)    public

b)    interface

c)    codetables(n)|functions(n)

d)    connections

e)    filters

f)    errorCodes

1.1 确定唯一接口

1.接口平台通过interfaceid和transactionid两个字符串变量,可确定唯一的接口;

2.接口平台主配置下的XML文件名称(不带后缀.xml),必须和该XML文件中的interface节点的id保持一致。例如有cfg/main/account.xml 文件;

3.接口平台主配置/cfg/main/目录下支持子目录分层结构。

1.2 interface

​ 在接口主配置root根节点下,存在有且只有一个的interface节点,用来定义多个transaction交易。

1.2.1 父节点

  • ​ root:xml文件根节点,无意义

1.2.2 子节点

  • ​ transaction:定义接口的交易,至少一个;

1.2.3 属性

属性 描述 值类型 示例
id 标识 string 接口标识,具有一定的接口含义如account
basePackage 包名称 string 预留字段
language 语言 String 暂时不用
type 类型 String client/server,接口是客户端还是由服务调用,默认为server。
如果为server,会将配置文件加载到内存中,避免反复读取文件,可提高效率
version 接口版本 string 1.0
2.0 后续会持续使用2.0方式

1.2.4 规则

  • ​ 属性中id、basePackage为必配项,其他为可选项;
  • ​ 属性id必须与主接口配置文件名相同(不含后缀名);

1.2.5 示例

<interface id="gdserver" version="2.0" type="server">
    <transaction id="s001">
        ...
    </transaction>
    <transaction id="s002">
        ...
    </transaction>
</interface>

1.3 transaction

​ 接口交易配置,接口处理的具体实现在此定义,严格意义来说一个transaction交易对应一个现实的接口,interface下可以存在多个transaction。transaction的执行流程通过step确定每一步骤的具体操作。

    配置顺序:
        a)    step(n)

1.3.1 父节点

  • ​ interface

1.3.2 子节点

  • ​ step:定义交易的每个步骤具体的处理流程,至少一个;

1.3.3 属性

属性 描述 值类型 示例
id 标识 string 交易唯一标识transactionid
detail 交易执行的详细信息存储文件 string D:/detailinfo.log
version 版本号 String Version=”2.0”
singleton 是否为单例模式 String 默认为false。
如果配置成singleton=”true” 则表示接口为单例模式,可防止并发操作。

1.3.4 规则

  • ​ 属性id为必配项,其他为可选项。

  • ​ 子节点process为可配项,如果不配置process,将会根据step的顺序依次执行,如果此时存在id=exception的step,异常后会执行并结束交易,如果未发生异常那么会跳过exception的step;

1.3.5 示例

<transaction id="s001">
    <process>
        ...
    </process>
    <step id="handle">
        ...
    </step>
    <step id="exception">
        ...
    </step>
</transaction>

1.4 step

​ 用以划分接口中的单个具体步骤,执行上没有特殊意义,但是在描述交易过程上更加直观利于理解。具体操作的执行多依靠filter、connection实现。

1.4.1 父节点

  • ​ transaction

1.4.2 子节点

  • ​ import:引用配置项;
  • ​ filter:引用预先定义的处理操作;
  • ​ connection:引用预先定义的连接操作;
  • ​ foreach:定义的是条件循环控制操作;
  • ​ while:定义的是条件循环控制操作;
  • ​ if:定义条件控制,满足条件才会执行if下的子节点;
  • ​ else:配合if一起使用,不满足if条件时,执行else下的子节点;
  • ​ elseif:配合if使用,当满足elseif的条件时,执行elseif下的子节点;

1.4.3 属性

属性 描述 值类型 示例
id 标识 string 能表达通道含义的名字如account_in
level 日志级别 String 动态设置日志级别
level=”debug”
level=”info”

1.4.4 规则

  • ​ 属性id为必配项,其他为可选项;
  • ​ step下至少会配置一个filter或者connection的具体处理。如果为空,步骤为空控步骤无意义;
  • ​ 子节点foreach配置循环条件,如果step下配置foreach节点,foreach下必须配置至少一个filter或者connection;
  • ​ 子节点if配置条件判断,如果step下配置if节点,if下必须配置至少一个filter或者connection;
  • ​ 子节点foreach、while、if、else、elseif之间支持多层嵌套使用。

1.4.5 示例

<step id="result">
    <filter ref="fixedFilter" type="out">
       <field tag="ccy" value="CNY" type="String" size="3" description="货币"/> 
        <field tag="acstatus" value="A" type="String" size="1" description="帐号状态"/> 
        <field tag="osbal" value="13555.63" type="number(16,2)" size="" description="账户余额"/> 
        <field tag="filler" value="XXXXX" type="String" size="962" description="货币"/> 
    </filter>
    <filter ref="fileConnection" type="out">
        <property name="path" value="D:/xxx.txt"/>
    </filter>
</step>

1.5 connection

​ 主要用于定义交互协议类型,定义数据接入输出的连接方式。特别说明step下的connection属于引用类型,配置与声明定义时的connection略有不同。

1.5.1 父节点

  • ​ step
  • ​ foreach
  • ​ while
  • ​ if
  • ​ else
  • ​ elseif

1.5.2 子节点

  • ​ property:连接的属性节点,可以配置连接所需要的属性参数,如配置用户名,密码,url等;

1.5.3 属性

属性 描述 值类型 示例
ref 引用 string 引用已经定义好的connection对象
type 数据流向 string type=”in”表示接入(接收);
type=”out”表示接出(发送);
encoding 字符集 string 默认为Utf-8

1.5.4 property属性

属性 描述 值类型 示例
Name 标识 string url: webservice发布地址
class: webservice发布的接口
method: 接口提供的方法
value string 当前字段的值;

1.5.5 规则

  • ​ 属性ref为必配项,其他为可选项,必须正确指定到connections中的定义的connection的id属性;
  • ​ 子节点property为连接所需要的属性,如用户名密码等,如果此处配置的property与connections下定义的property的name属性相同,将会达到替换的目的;
  • ​ 需要特别注意数据流向的配置,in代表输入流,out代表输出流,针对in、out存在不同的处理;

1.5.6 示例

​ 该实例为执行进行socket连接,通过property配置socket连接的目标ip与端口号。

<connection ref="socketClientConnection">
    <property name="ip" value="127.0.0.1"/>
    <property name="port" value="8888"/>
</connection>

1.6 filter

​ 主要用于定义针对不同数据、不同连接类型的处理流程。特别说明step下的filter属于引用类型,配置与声明定义时的filter略有不同。

1.6.1 父节点

  • ​ step
  • ​ foreach
  • ​ while
  • ​ if
  • ​ else
  • ​ elseif

1.6.2 子节点

  • ​ import:引用配置项;
  • ​ field:处理操作的操作域;
  • ​ convertor:转换器;
  • ​ validator:校验器;
  • ​ foreach:定义的是条件循环控制操作;
  • ​ while:定义的是条件循环控制操作;
  • ​ if:定义条件控制,满足条件才会执行if下的子节点;
  • ​ else:配合if一起使用,不满足if条件时,执行else下的子节点;
  • ​ elseif:配合if使用,当满足elseif的条件时,执行elseif下的子节点;
  • ​ call:二次调用交易;

1.6.3 属性

属性 描述 值类型 示例
tag 指定filter执行结果保存 String
via 指定输入filter进行处理的变量 String Filter需要解析的变量
ref 引用 string 引用已经定义好的filter对象
type 数据流向 string type=”in” 表示数据解析;
type=”out” 表示数据组装
encoding 字符集 string 默认为utf-8
tag filter作为整体的变量名 String
scope 与tag变量名对应的变量声明周期 string transaction:交易内
step:步骤内
this:connection与filter内
transition:当前有效

1.6.4 规则

  • ​ 子节点foreach、while、if、else、elseif之间支持多层嵌套使用。
  • ​ 属性ref为必配项,其他为可选项,必须正确指定到filters中的定义的filter的id属性;
  • ​ 此处引用的filter与filters中定义的filter在节点上存在明显差异,定义的filter只有parameter子节点,而此处无parameter子节点;

1.6.5 示例

​ 该filter配置foreach子节点,会根据foreach的条件再对foreach下面的field进行处理,实例中,foreach下配置的还有if节点,只有满足if节点条件才会对if下的field进行处理,不满足则会按照else下面的field进行处理。

<filter ref="fixedFilter" type="out">
    <foreach tag="j" begin="0" end="10" step="1">
        <field etag="PERRP UNQ NO" value="${unqno}" type="String" size="20" description="外围系统唯一编号"/>
        <if condition="${j==time-1 &amp;&amp; j*10+j==size}">
            <field etag="END FLAG" value="Y" type="String" size="1" description="财务结束标志"/>
        </if>
        <else>
             <field etag="END FLAG" value="" type="String" size="1" description="财务结束标志"/>
        </else>
    </foreach>
</filter>

1.7 field

​ filter中处理的操作单个数据域,用于从数据报中提取填充特定位置的数据。

1.7.1 父节点

  • ​ filter
  • ​ foreach
  • ​ while
  • ​ if
  • ​ else
  • ​ elseif

1.7.2 属性

属性 描述 值类型 示例
tag EL表达式中的变量 string filter中字段的标识,作为key存入上下文;
etag 外部报文路径,也就是EMF模型,类似一个特殊指令 string 一般针对特殊的filter处理时需要配置
value string 当前字段的值;
scope 上下文生命周期 string transaction:交易内
step:步骤内 this:connection与filter内
transition:当前有效
type 数据类型 string String
Int
Double
Number(a,b)
Date(‘pattern’)
Arraylist 基本类型数组
LST(供sqlFilter特殊处理)
map(HashMap)
Linkedmap(有序map)
size 数据长度 Int
codetable 码表 string 平台码表id
description 描述 string field描述信息

1.7.3 规则

  • ​ 当filter的type为in时,一般还需配置etag与tag,当filter的type为out时,一般只需配置etag,etag针对部分特殊filter的处理而设立,其他属性为可选项;

1.7.4 示例

<field tag="len" value="${dataLen}" type="int" size="8" description="输入数据长度"/>

1.8 convertor

​ filter中处理的操作单个数据域,用于从数据报中提取填充特定位置的数据。

1.8.1 父节点

  • ​ filter
  • ​ foreach
  • ​ while
  • ​ if
  • ​ else
  • ​ elseif

1.8.2 属性

属性 描述 值类型 示例
tag EL表达式中的变量 string filter中字段的标识,作为key存入上下文;
value string 当前字段的值;

1.8.3 规则

  • ​ convertor不参与Filter中filed组装。convertor实际可用filed节点进行替代。

1.8.4 示例

<filter tag="msg" type="out" ref="fixedFilter" encoding="GBK">
    <convertor tag="dataLen" value="${getLen}">
        <argrument description="this" value="${msg}"/>
    </convertor>
    <field value="z02" type="String" size="3"/>
    <field value="3888" type="String" size="4"/>
    <field value="${msg}" type="String" size="${dataLen}"/>
</filter>

results matching ""

    No results matching ""