Ofbiz项目学习——阶段性小结——服务返回结果
Posted gzhcsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); //..... //其它代码 //.......
以上是关于Ofbiz项目学习——阶段性小结——服务返回结果的主要内容,如果未能解决你的问题,请参考以下文章