zoukankan      html  css  js  c++  java
  • Ofbiz项目学习——阶段性小结——服务返回结果

    一、返回成功

    1、在.DispatcherReturnDemoService类中编写服务【returnSuccess】,内容如下:

     /**
         * 返回成功结果
         * @param dctx
         * @param context
         * @return
         */
    	public static Map<String,Object> returnSuccess( DispatchContext dctx, Map<String,Object> context ){		
               
    		//填写服务执行的代码
    		//.......
    		String message = "执行成功";
    		
    		//当程序执行成功时, 返回成功结果集
    		Map<String,Object> result = ReturnMapUtil.getSuccessMap();
    		result.put("message", message);
    		return result;		
    }
    

    2、在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务

    	<service name="returnSuccess" engine="java"
    		location="DispatcherReturnDemoService" invoke="returnSuccess">
    		<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
    	</service>
    

    二、返回失败

    1、返回失败结果

    1.1 在DispatcherReturnDemoService类中编写服务【returnError】,内容如下:

     /**
         * 返回失败结果
         * @param dctx
         * @param context
         * @return
         */
    	public static Map<String,Object> returnError( DispatchContext dctx, Map<String,Object> context ){
    		
               
    		//填写服务执行的代码
    		//.......
    		String message = "执行失败";
    		boolean errorFlag =  true;
    		
    		//返回结果
    		Map<String,Object> result = null;
    		if( errorFlag ){
    			//当程序执行失败时, 返回成功结果集
    			result = ReturnMapUtil.getErrorMap("errorCode"); //这里的errorCode需要用具体的错误编码来替换
    			result.put("message", message);
    		}else{
    			//当程序执行成功时, 返回成功结果集
    			result = ReturnMapUtil.getSuccessMap();
    			result.put("message", message);
    		}
    		return result;
    		
    }
    

    1.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务

    	<service name="returnError" engine="java"
    		location="DispatcherReturnDemoService" invoke="returnError">
    		<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
    	</service>
    

    2、在服务内部捕获异常后怎么转成失败结果返回

    2.1 DispatcherReturnDemoService类中编写服务【catchError】,内容如下:

    /**
         * 捕获异常结果
         * @param dctx
         * @param context
         * @return
         */
    	public static Map<String,Object> catchError( DispatchContext dctx, Map<String,Object> context ){
    		
    		//填写服务执行的代码
    		try{
    			//假设执行的代码中有回抛出异常的情况, 我们需要捕获这个异常
    			int a =  8 ;
    			int b =  0 ;
    			int i = a / b;
    			
    		}catch(Exception e){
    			//则把错误信息以Error级别打印到日志文件中
    			Debug.logError(e, module);
    			//把指定的错误码对应的描述信息返回给服务调用者
    			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0000);
    		}
    		//当程序执行失败时, 返回成功结果集
    		return ReturnMapUtil.getSuccessMap();
    		
    }
    

    2.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务

    	<service name="catchError" engine="java" location="DispatcherReturnDemoService" invoke="catchError">
    		<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
    	</service>
    

    3、调用一个服务后怎么判断该服务是否执行成功

    3.1 在DispatcherReturnDemoService类中编写服务【checkResult】,内容如下:

     /**
         * 调用一个服务后怎么判断该服务是否执行成功
         * @param dctx
         * @param context
         * @return
         */
    	public static Map<String,Object> checkResult( DispatchContext dctx, Map<String,Object> context ){
    		
             
            //获取服务引擎
    		LocalDispatcher dispatcher = dctx.getDispatcher();
    		
    		
    		//.....
    		//其它代码
    		//.......
    		
    		//调用服务
    		Map<String,Object> output = null;
    		try{
    			Map<String,Object> input = FastMap.newInstance();
    			output = dispatcher.runSync("returnSuccess", input);	
    		}catch(Exception e){
    			//则把错误信息以Error级别打印到日志文件中
    			Debug.logError(e, module);
    			//把指定的错误码对应的描述信息返回给服务调用者
    			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0000);
    		}
    		//检查该服务是否已经执行成功, 如果没有执行成功,则把错误结果直接返回给上层调用者.
    		if( !ServiceUtil.isSuccess(output) ){
    			return output;
    		}
    		//.....
    		//其它代码
    		//.......
    		
    		//当程序执行成功时, 返回成功结果集
    		return ReturnMapUtil.getSuccessMap();	
    }
    

    3.2 在servicedef文件夹下的services_dispatcher_return_demo.xml中把这两个方法配制成服务

    	<service name="returnError" engine="java" location="DispatcherReturnDemoService" invoke="returnError">
    		<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
    	</service>
    

    4、怎么把一个服务的失败返回结果转成业务异常类抛出

    4.1 在DispatcherReturnDemoService类中编写一个方法【checkResult】,内容如下: 

    /**
         * 怎么把一个服务的失败返回结果转成业务异常类抛出(这个仅仅是一个方法, 不是一个服务)
         * @param dctx
         * @param context
         * @return
         */
    	public static void returnInMethod( LocalDispatcher dispatcher ) throws BusinessException{
    		
    		//.....
    		//其它代码
    		//.......
    		
    		//调用服务
    		Map<String,Object> output = null;
    		try{
    			Map<String,Object> input = FastMap.newInstance();
    			output = dispatcher.runSync("returnSuccess", input);	
    		}catch(Exception e){
    			//则把错误信息以Error级别打印到日志文件中
    			Debug.logError(e, module);
    			//把异常类型转成指定类型,并抛出
    			throw new BusinessException(e,DemoErrorMapping.BASE0000);
    		}
    		//检查该服务是否已经执行成功, 如果没有执行成功,把返回结果转成业务异常类抛出
    		if( !ServiceUtil.isSuccess(output) ){
    			throw new BusinessException(output);
    		}
    		
    		//.....
    		//其它代码
    		//.......
    }
    

      

     

      

     

  • 相关阅读:
    【原】Windows下常用命令
    【转】Samba配置文件详解
    JS笔记-选项卡的重用
    canvas.toDataURL()跨域问题
    Adobe Air 写文件如何换行
    AS3多线程快速入门(三):NAPE物理引擎+Starling[译]
    AS3多线程快速入门(二):图像处理[译]
    AS3多线程快速入门(一):Hello World[译]
    使用FileStream对象读写文件(转)
    Adobe Air写配置文件
  • 原文地址:https://www.cnblogs.com/gzhcsu/p/11202619.html
Copyright © 2011-2022 走看看