码迷,mamicode.com
首页 > 其他好文 > 详细

Ofbiz项目学习——阶段性小结——服务返回结果

时间:2019-07-17 18:32:56      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:替换   object   throws   err   iss   mapping   class   描述   sage   

一、返回成功

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);
		}
		
		//.....
		//其它代码
		//.......
}

  

 

  

 

Ofbiz项目学习——阶段性小结——服务返回结果

标签:替换   object   throws   err   iss   mapping   class   描述   sage   

原文地址:https://www.cnblogs.com/gzhcsu/p/11202619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!