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项目学习——阶段性小结——服务返回结果的更多相关文章
- Ofbiz项目学习——阶段性小结——视图
一.简要介绍 1.按照SQL的视图概念:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表.视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 2. ...
- Ofbiz项目学习——阶段性小结——查询
一.组装参数的学习 首先是查询条件,对于查询条件,需要判断是否从前端传递空值?——怎么处理查询空值? 当然可以一个一个进行判断,但是这样代码会导致很多,可以统一处理,形成一个公共方法. 1. 单个处理 ...
- Ofbiz项目学习——阶段性小结——删除数据
一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Obj ...
- Ofbiz项目学习——阶段性小结——更新数据
一.根据一个字段进行修改 /** * 根据一个字段进行修改(这个条件字段可以是主键, 也可以不是主键) * @param dctx * @param context * @return */ publ ...
- Ofbiz项目学习——阶段性小结——插入数据
一.通用插入操作 /** * * 编写一个服务createUomOneDemo, * 该服务的作用是在表Uom中增加一条记录,其中: * 字段uomId的值为“BaseLineProduct”. * ...
- Apache OFBiz 学习笔记 之 服务引擎 二
加载服务定义文件 ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中 加载服务定义 例:framework/common/ofbi ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- Spring Boot 项目学习 (一) 项目搭建
0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...
随机推荐
- Docker 常用命令速查手册
记录一下docker的日常使用命令,本文主要针对linux + mac操作系统而言,window是否适用不太确定,谨慎使用 1. docker进程 docker进程启动.停止.重启,常见的三种case ...
- 045 用户登录功能01----JWT和后台代码
(1)有状态登录概述 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登录后,我们把登录者 ...
- [转帖]UML类图关系图解
UML类图关系图解 https://www.cnblogs.com/TvvT-kevin/p/9357339.html 一.类结构 在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三 ...
- Spring Cloud之Zuul网关路由
前端请求先通过nginx走到zuul网关服务,zuul负责路由转发.请求过滤等网关接入层的功能,默认和ribbon整合实现了负载均衡 比如说你有20个服务,暴露出去,你的调用方,如果要跟20个服务打交 ...
- [shell] while read line 与for循环的区别
[shell] while read line 与for循环的区别 while read line 与for循环的区别---转载整理 while read line 是一次性将文件信息读入并赋值给变量 ...
- 浏览器解析js
网页加载js步骤 1.浏览器一边下载html网页,一边开始解析(不等下载完就解析)2.遇到<script>标签,暂停解析,网页渲染的控制权交给javascript引擎3.如果<scr ...
- 2019 边锋游戏java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.边锋游戏等公司offer,岗位是Java后端开发,因为发展原因最终选择去了边锋游戏,入职一年时间了,也成为了面 ...
- 【真】CSP2019退役记(upd:12.21)
这是第一次CSP(Counter-Strike Professor),也是最后一次. Day-1 上午考试,日常被虐. 下午颓mc Day0 上午考试,日常被虐. 下午颓mc 晚上看了下悬线法.最小表 ...
- Django:RestFramework之-------序列化器
8.序列化 功能: 对请求数据进行验证 对Queryset进行序列化 8.1一个简单序列化: import json from api import models from rest_framewor ...
- Nginx作为代理服务
代理服务简介 什么是代理服务 代理-代理办理(代理理财.代理收货.代理购物等等). HTTP请求没有代理服务的模型图 HTTP请求具有代理服务的模型图 代理分类 正向代理 反向代理 正向代理 当局域网 ...