Skip to the content.

IMAPPER快速参数映射及服务编排

概述

imapper报文转换旨在将界面入参和会话参数等自动转换为外部服务调用需要的入参格式

服务编排能力旨在将一次复杂的外部调用使用xml配置进行简化和清晰化

提供动态发布能力,实现在线更新应用的能力

依赖

<dependency>
    <groupId>org.walkframework.boot</groupId>
    <artifactId>walk-starter-base</artifactId>
    <version>${latestVersion!1.9.6}</version>
</dependency>

<dependency>
    <groupId>org.walkframework.boot</groupId>
    <artifactId>walk-tools-imapper</artifactId>
    <version>${latestVersion!1.7.7}</version>
</dependency>
    <exclusions>
        <exclusion>
            <groupId>org.walkframework.boot</groupId>
            <artifactId>walk-tools-config</artifactId>
        </exclusion>
    </exclusions>

报文转换

<?xml version="1.0" encoding="UTF-8"?>
<imapper thisMode="true" prepareDefaultTransformers="SYSDATE19" xmlns="http://www.walkframework.com/imapper/atom">
    <ORDER_REQ>
        <ORDER src="INPUT_ORDER" transform="@xmlMapperUseCaseService.appendParam(_this['ORDER_ID'], _root[INPUT_ORDER_SUB_ITEM][], #safeGet(_root, 'INPUT_ORDER_GOODS.xxx.TMPL_ID'))" var="order">
            <ORDER_ID holder="1" format="trimToNull">ORDER_ID</ORDER_ID>
            <MORE_INFO>moreOrderInfo</MORE_INFO>
            <SOME_CODE default="9521">SOME_CODE</SOME_CODE>
            <SEQ default="SEQ" defaultType="TRANSFORMER"></SEQ>
            <PROTOCAL src="INPUT_ORDER_PROTOCOL" var="protocal">
                <PROTOCOL_ID holder="1">PROTOCOL_ID</PROTOCOL_ID>
                <UPDATE_TIME>_root.SYSDATE19</UPDATE_TIME>
                <PROVINCE_CODE enumType="PROVINCE_CODE">PROVINCE_CODE</PROVINCE_CODE>
            </PROTOCAL>
            <CUST_INFO src="INPUT_ORDER_SUB_ITEM" var="custInfo">
                <PSPT_ID holder="1">PSPT_NO</PSPT_ID>
                <CUST_ID>INPUT_ORDER.CUST_ID</CUST_ID>
                <CUST_NAME default="客户">CUST_NAME</CUST_NAME>
                <CUST_TYPE enumType="CUST_TYPE">CUST_TYPE</CUST_TYPE>
                <SEX enumMap="1=男, 0=女">SEX</SEX>
                <BIRTHDAY>BIRTHDAY</BIRTHDAY>
                <OTHER_DATE defaultType="SELECTOR" default="_root.SYSDATE19">OPERATE_TIME</OTHER_DATE>
            </CUST_INFO>
        </ORDER>
    </ORDER_REQ>
</imapper>

流程编排

<?xml version="1.0" encoding="utf-8"?>
<imapper type="flow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.walkframework.com/imapper/flow">

    <!--参数预处理-->
    <flow id="paramDeal" state-resolver="xxService.dealXxParam(_root)">
        <transition on="firstLevel" to="firstLevel"></transition>
        <transition to="secondLevel"></transition><!-- 没有on则表示最后的else,全量匹配 -->
    </flow>

    <!--一级操作,只使用state-resolver返回响应码处理的情况,transition>on配置只处理响应状态码-->
    <flow id="firstLevel" state-resolver="xxService.getFirstLevel(_root)">
        <transition on="success" to="secondLevel"></transition>
        <transition to="callFail"></transition>
    </flow>

    <!--二级操作,调用服务后再使用state-resolver返回响应码处理的情况,_this代表服务结果,_root代表上下文-->
    <flow id="secondLevel" service="xxService.call('secondLevel',_root)" state-resolver="xxDealService.dealSecondRsp(_this,_root)">
        <transition on="success" to="thirdLevel"></transition>
        <transition to="callFail"></transition>
    </flow>

    <!--三级操作,调用服务后直接通过transition表达式判断服务响应的结果再做transition,#root代表返回值-->
    <flow id="thirdLevel" service="xxService.call('thirdLevel',_root)">
        <transition on="#root[respCode] == '0000'" to="callSuccess"></transition>
        <transition to="callFail">
            <!-- 设置错误码到上下文 -->
            <param name="respCode" default="1234"></param>
        </transition>
    </flow>

    <!--业务调用失败,返回失败信息-->
    <output id="callFail" type="ResponseInfo">
        <respData>respData</respData>
        <respMsg>respMsg</respMsg>
        <respCode>respCode</respCode>
    </output>


    <!--调用成功,返回成功信息-->
    <output id="callSuccess" type="ResponseInfo" > <!-- 调用成功,正常返回 -->
        <respData>respData</respData>
        <respMsg default="xx成功!">respMsg</respMsg>
        <respCode default="0000">respCode</respCode>
    </output>

    <!--调用异常,返回错误信息,且 当前流程中有且只有一个异常处理-->
    <output id="failOutput" exception="true">
        <respCode default="8888">errorCode</respCode>
        <respMsg default="操作成功">exception-msg</respMsg>
        <respData>respData</respData>
    </output>


</imapper>

<--分布式定时任务
回列表
动态测试桩-->