httpInvoker提供远程服务调用总结(三)

对外服务接口实现

public class RideServiceImpl implements RideService {

    private static final Log logger = LogFactory.getLog(RideServiceImpl.class);

 

    /**

     * 客户端远程调用的方法.

     *

     * @param service

                服务

     * @param params

                参数

     * @return 方法返回值

     */

    public Object invoke(RemoteService service, Object[] params) {

        if(logger.isInfoEnabled()){

            logger.info("receive remote call " + service);

            if(params != null){

                for(int i = 0, len = params.length; i < len; i++){

                    logger.info("param[" + i + "]=" + params[i] + " class=" + (params[i] == null?null:params[i].getClass()));

                }

            }

        }

       RemoteRes res = new RemoteRes();

       res.setCode(0);

       res.setErrmsg("");

        if (service == null) {

           res.setCode(-1);

           res.setErrmsg("request error");

           return res;

       }

       String sessionId = service.getAttach();

        if(logger.isInfoEnabled()){

            logger.info("in rideserviceImpl sesessionId=service.getAttach()=" + sessionId);

        }

       if (sessionId == null) {

           res.setCode(-2);

           res.setErrmsg("session id can't be null");

           return res;

       }

       ApplicationData.setSessionId(sessionId);

       switch (service.getType()) {

       // service from spring bean

       case 0:

           Object obj = WebUtils.getSpringBean(service.getBean());

           if (obj == null) {

              res.setCode(-2);

              res.setErrmsg("service name error");

              return res;

           }

           try {

              Object reObj = invoke(obj.getClass(), obj, service

                     .getMethodName(), service.getParamType(), params);

              if (reObj == null) {

                  if (returnVoid(obj.getClass(), service.getMethodName(),

                         service.getParamType())) {

                     res.setCode(0);

                  } else {

                     res.setCode(0);

                     res.setErrmsg("method return null");

                  }

              } else if (reObj instanceof BFOList) {

                  BFOListHelper helper = new BFOListHelper();

                  helper.setList((BFOList) reObj);

                  res.setCode(0);

                  res.setValue(helper);

              } else {

                  res.setCode(0);

                  res.setValue(reObj);

              }

              return res;

            } catch (InvocationTargetException ite) {

                Throwable tr =  ite.getCause();

                String errMsg = tr.toString();

                if(tr instanceof BizException){

                    BizException be = (BizException)tr;

                    MessageSource messageSource = ((MessageSource) ContextInit.getContext().getBean("messageSource"));

                    if( messageSource != null){

                        errMsg = messageSource.getMessage(be.getSysMsg().getKey(), null, Locale.CHINA);

                    }

              

                }

                logger.error("cause " + tr);

                res.setCode(-9999);

                res.setErrmsg(errMsg);

                return res;

           } catch (Exception e) {

              logger.error("invoke method error", e);

              res.setCode(-9999);

              res.setErrmsg(e.getMessage());

              return res;

           }

           // class's static method

       case 2:

           try {

              Class clz = Class.forName(service.getBean());

              Object reObj = invoke(clz, service.getMethodName(), service

                     .getParamType(), params);

              if (reObj == null) {

                  if (returnVoid(clz, service.getMethodName(), service

                         .getParamType())) {

                     res.setCode(0);

                  } else {

                     res.setCode(0);

                     res.setErrmsg("method return null");

                  }

              } else if (reObj instanceof BFOList) {

                  BFOListHelper helper = new BFOListHelper();

                  helper.setList((BFOList) reObj);

                  res.setCode(0);

                  res.setValue(helper);

              } else {

                  res.setCode(0);

                  res.setValue(reObj);

              }

              return res;

           } catch (Exception e) {

              logger.error("invoke method error", e);

              res.setCode(-9999);

              res.setErrmsg(e.getMessage());

              return res;

           }

       case 3: //SQL引擎的调用

           sqlEngineCall(service,params,res);

           return res;

       default:

           break;

 

       }

       ApplicationData.setSessionId(null);

       return res;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值