XmlFilter

处理XML报文的解析和组装

插件配置

  • 配置声明在commons.xml中
<filter id="fixedFilter" class="FixedFilter"/><!-- 数据处理类 -->
属性 说明
id 插件声明定义的id
class 声明的插件类名

属性配置

filter的属性配置

属性 描述 值类型 示例
ref 引用 string 引用已经定义好的filter对象
type 数据流向 string in、out

field的属性配置

属性 描述 值类型 示例
tag 标识 string filter中字段的标识,作为key存入上下文;
etag 特殊标志 string 解报时,取出文本节点的内容
value string 当前字段的值;
type 数据类型 string String 、int、Number(a,b)

组装XML报文

XML报文组装时,每个field子节点会给XML报文添加一个结点或给已存在的节点添加一个属性;

field结点的etag属性表示XML报文的节点路径或属性路径,value代表节点值,etag的值以“@XXX”结尾时,value代表属性值;

组装XML时,field节点的tag属性可不配置。如果配置了,会保存当前field的value值到tag,后面可通过表达式进行访问。

在cfg/etc/commons.xml中完成filter配置

<filters>
   <filter id="xmlFilter" class="XmlFilter" />
</filters>
<!--xml报文配置效果举例-->
<Root>
<Head>
      <src>0000ICBC-440101</src>
      <des>000000SB-440100</des>
      <dataType>2001</dataType>
      <msgId>20012012091200000001</msgId>
      <msgRef>10012009080400000001</msgRef>
      <workDate>2009-08-04</workDate>
    </Head>
    <Body>
      <Object>
        <Record>
          <originDataType>1001</originDataType>
          <originSponsorCode>E306</originSponsorCode>
          <originEntrustDate >2013-10-18</originEntrustDate >
          <errorCode>E306</errorCode>
        </Record>
        <Record>
          <originDataType>1001</originDataType>
          <originSponsorCode>E306</originSponsorCode>
          <originEntrustDate >2013-10-18</originEntrustDate >
          <errorCode>E306</errorCode>
        </Record>
      </Object>
</Body>
</Root>

<--对应配置举例-->
<root>
<interface id="testxml" basePackage="com.brilliance.eibs.core.service.instance.impl" version="1">
<transaction  id="handle" >
  <step id="handle" >
      <filter ref="xmlFilter" type="out"  >
          <field etag="Root.Head.src" value="0000ICBC-440101" description="" />
          <field etag="Root.Head.des" value="000000SB-440100" description="" />
          <field etag="Root.Head.dataType" value="2001" description="" />
          <field etag="Root.Head.msgId" value="20012012091200000001" description="" />
          <field etag="Root.Head.msgRef" value="10012009080400000001" description="" />
          <field etag="Root.Head.workDate" value="2009-08-04" description="" />
          <foreach tag="i" begin="0" end="2" step="1">
              <field etag="Root.Body.Object.Record(${i}).originDataType" value="1001" description="" />
      <field etag="Root.Body.Object.Record(${i}).errorCode" value="E306" description="" />
              <field etag="Root.Body.Object.Record(${i}).originEntrustDate " value="${formatNow('yyyy-MM-dd')}" description="" />
              <field etag="Root.Body.Object.Record(${i}).originSponsorCode" value="E306" description="" />
          </foreach>
      </filter>
  </step>
</transaction>
</interface>
</root>

解析XML报文

XML报文中,同一个节点下存在多个相同的节点时,可以通过提供的getChildrenCount(String)方法,传入节点路径,获得相同节点的个数。

获取多个相同节点中的某个节点,可以通过小括号指定下标进行区分。

使用etag属性指定节点路径。

tag属性用来保存从etag路径获取的值

在cfg/etc/commons.xml中完成filter配置

<filters>
       <filter id="xmlFilter" class="XmlFilter" />
</filters>
<root>
   <interface id="example"
       basePackage="com.brilliance.eibs.core.service.instance.impl" version="1">
       <transaction id="testxml">
           <step id="receive">
               <filter ref="xmlFilter" type="in">
                   <field tag="size" value="${getChildrenCount('Root.Body.Record')}"
                       scope="transaction" />
                   <!-- 定义账号String字符串 -->
                   <foreach tag="i" begin="0" end="${size}" step="1">
                       <field tag="accno[${i}]" etag="Root.Body.Record(${i}).AccNo"
                           scope="transaction" />
                   </foreach>
               </filter>
           </step>
       </transaction>
   </interface>
</root>

results matching ""

    No results matching ""