zoukankan      html  css  js  c++  java
  • adapter结构异常记录

    adapter结构异常记录,记录在这个类里,记录数据日志,在148行:

    com.creditharmony.adapter.core.service.GeneralHttpService

    package com.creditharmony.adapter.core.service;
    
    import java.util.Properties;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.creditharmony.apporveadapter.bean.BaseInfo;
    import com.creditharmony.apporveadapter.bean.BaseOutInfo;
    import com.creditharmony.apporveadapter.bean.GeneralHttpInfoModel;
    import com.creditharmony.apporveadapter.bean.GeneralReturnInfo;
    import com.creditharmony.adapter.constant.Constant;
    import com.creditharmony.apporveadapter.constant.ErrorType;
    import com.creditharmony.adapter.constant.MsgKey;
    import com.creditharmony.apporveadapter.exception.AdapterException;
    import com.creditharmony.adapter.utils.AdapterUtils;
    import com.creditharmony.adapter.utils.Messages;
    import com.creditharmony.common.util.PropertyUtil;
    import com.creditharmony.common.util.SpringContextHolder;
    
    /**
     * @Class Name GeneralHttpService
     * @author yourname
     * @Create In 2016年12月3日
     */
    @Controller
    public class GeneralHttpService {
        /** 业务挡板测试区分名. */
        private static final String BAFFLE_FIX = "_Baffle";
        
        /** 日志. */
        private static final Logger logger = Logger.getLogger(GeneralHttpService.class);
        
        /** 属性文件. */
        static Properties properties = PropertyUtil.getProperties(Constant.CONFIG_PROPERTY);
        
        /** HttpServletRequest. */
        @Autowired
        private HttpServletRequest request;
        
        /** 参数记录处理. */
        @Autowired
        private IParamRecord paramRecord;
        
        /**
         * Client端调用统一接口.
         * 实现分发器效果
         * 
         * @param paramObj 调用参数
         * @return 返回参数
         */
        @ResponseBody
        @RequestMapping(value = "http/generalHttpService", method = RequestMethod.POST)
        public String exec(@RequestParam("content") String content) {
            
            // 取得唯一序列号
            String serialNum = AdapterUtils.getSerialNum();
            // 获得调用客户端IP地址
            String clientIp = getClientIP(request, serialNum);
            // 大金融的报文转为Model对象
            GeneralHttpInfoModel paramObj = JSON.parseObject(content, GeneralHttpInfoModel.class);
    
            logger.info(Messages.get(MsgKey.GENERALSERVICE_INPARAM, new String[] { content }));
            // 参数日志记录: 传入参数
            paramRecord.doInParamRecord(
                    serialNum,
                    content,
                    clientIp,
                    paramObj.getServiceName());
    
            // 取得业务参数Json
            String paramStr = paramObj.getParam();
    
            logger.info(Messages.get(MsgKey.GENERALSERVICE_INPARAM, new String[] { paramStr }));
            // 参数日志记录: 传入参数
            paramRecord.doInParamRecord(
                    serialNum,
                    paramStr,
                    clientIp,
                    paramObj.getServiceName());
            
            /*
             * 处理:取得业务实现类
             * 利用传入的serviceName,通过反射方式取得该业务实际类
             */
            IBaseService baseService = this.initService(paramObj.getServiceName());
    
            /*
             * 处理:调用实际业务处理
             * 通过父类抽象方法调用实现子类具体业务调用
             */
            GeneralReturnInfo out = new GeneralReturnInfo();
            BaseOutInfo outParam = null;
            // 返回对象参数
            String outParamStr = "";
            try {
                
                // 将传入的JSON报文转为Bean对象
                BaseInfo inBean = (BaseInfo) JSON.parseObject(paramStr, doCreatInObject(paramObj.getInClassName()).getClass());
                inBean.setSerialNum(serialNum);
                outParam = baseService.exec(inBean);
                out.setOutParam(JSON.toJSONString(outParam, SerializerFeature.WriteMapNullValue));
    
                outParamStr = JSON.toJSONString(out, SerializerFeature.WriteMapNullValue);
                
                /*
                 * 处理:返回参数记录处理.
                 */
                paramRecord.doOutParamRecord(
                        serialNum,
                        outParamStr);
                logger.info(Messages.get(MsgKey.GENERALSERVICE_OUTPARAM, new String[] { outParamStr }));
            } catch (Exception e) {
                boolean isNewExeption = e instanceof AdapterException;
                
                AdapterException businessException = null;
                // 将新产生的例外封装
                if (isNewExeption == false) {
                    businessException = new AdapterException(ErrorType.BUSSINESS_ERROR, e, "接口服务端产生异常.");
                } else {
                    businessException = (AdapterException) e;
                }
                
                out.setErrorType(businessException.getErrorType());
                out.setErrorMsg(businessException.getMessage());
                out.setBaseOutInfo(businessException.getInfoOutObj());
                StringBuilder paramSb = new StringBuilder();
                
                // 取得返回对象日志
                paramSb.append("errorType=").append(out.getErrorType())
                        .append(", errorMsg=").append(out.getErrorMsg());
                outParamStr = paramSb.toString();
    
                /*
                 * 处理:异常错误记录处理.
                 */
                logger.error(Messages.get(
                        MsgKey.ERROR_SYSTEM_STACK, new String[] { businessException.getExceptionStackTrace() }));
                paramRecord.doExceptionRecord(serialNum, businessException);
                
                /*
                 * 处理:返回参数记录处理.
                 */
                paramRecord.doOutParamRecord(
                        serialNum,
                        outParamStr);
                logger.info(Messages.get(MsgKey.GENERALSERVICE_OUTPARAM, new String[] { outParamStr }));
            }
            return outParamStr;
        }
        
        /**
         * 反射传入Bean对象.
         * @param className 传入Bean包名+类名
         * @return Bean对象
         */
        private Object doCreatInObject(String className) {
            Object obj = null;
            try {
                Class<?> c = Class.forName(className);
                obj = c.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return obj;
        }
        
        /**
         * 获取客户端IP地址.
         * 
         * @param serialNum 请求唯一序列号
         * @return IP地址
         */
        private String getClientIP(HttpServletRequest request, String serialNum) {
            try {
                if (request.getHeader("x-forwarded-for") == null) {
                    return request.getRemoteAddr();
                }
                return request.getHeader("x-forwarded-for");
            } catch (Exception e) {
                // 异常错误记录
                AdapterException businessException = new AdapterException(e);
                paramRecord.doExceptionRecord(serialNum, businessException);
            }
            return "";
        }
        
        /**
         * 业务处理类实现.
         * 通过反射,实现业务对象
         * @param serviceName 业务实现类名
         * @return 业务实现类
         */
        private IBaseService initService(String serviceName) {
            
            String serviceId = "";
            boolean isBaffle = Boolean.parseBoolean(properties.getProperty(serviceName + BAFFLE_FIX));
            // true的场合, 运行挡板程序
            if (isBaffle) {
                // 测试挡板程序
                serviceId = serviceName + BAFFLE_FIX;
            } else {
                serviceId = serviceName;
            }
            IBaseService baseService = SpringContextHolder.getBean(serviceId);
            return baseService;
        }
    }
    

      

  • 相关阅读:
    [Js-JDBC]事务
    [Js-JDBC]SQL注入及解决,Statement与PreparedStatement
    [Js-Java SE]IO+Properties配置文件
    [Js-Java SE]可变长参数
    [Js-Java SE]线程同步(加锁)(synchronized,守护进程,死锁,计时器)
    [Js-MySQL]函数
    [Js-MySQL]运算符优先级
    2015年3月30日
    Maven知识点一览
    记一次MySQL(5.7版本)数据库的主从同步和备份
  • 原文地址:https://www.cnblogs.com/hoge/p/6920713.html
Copyright © 2011-2022 走看看