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 项目学习 ...
随机推荐
- 关于Linux TCP "SACK PANIC" 远程拒绝服务漏洞的修复
Linux 内核被曝存在TCP "SACK PANIC" 远程拒绝服务漏洞(漏洞编号:CVE-2019-11477,CVE-2019-11478,CVE-2019-11479),攻 ...
- C运算符优先级和结合性
C中运算符优先级和结合性一览表: 在上表中能总结出一下规律: (1)结合方向只有三个是从右往左,其余都是从左往右: (2)逗号运算符的优先级最低: (3)对于优先级,有一个普遍规律:算术运算符 > ...
- web-debug-server
web-debug-server 项目来自:https://github.com/itzg/web-debug-server 这位大哥的镜像做的很有意思:一个很小的web debug服务器,访问它可以 ...
- DispatcherServlet 是 spring 网络模块的核心
https://cn.bing.com/images/search?q=DispatcherServlet+&FORM=HDRSC2
- golang学习笔记--包导入及go 常用命令及参数
包导入:包导入路劲即代码包在工作区的src目录下的相对路径. 同一个源码文件中导入的多个代码包的最后一个元素不能重复,否则引起编译错误,如果只导入不使用,同样会引起编译错误 若想导入最后一个元素名相同 ...
- 使用el-dialog时,报错“Unknown custom element:<el-dialog> did you register the component correctly?...make sure to provide the 'name' option”
初学vue时,曾遇到一个无语的问题,在用el-dialog时一直显示没有导入,结果发现是因为没有把element ui引入到项目里. 需进行以下步骤: 1.执行: npm install elemen ...
- Entity Framework 学习系列(2) - MySql Database First 开发方式
目录 写在前面 环境 下载MySQL连接工具 创建Databse First 1.创建控制台 2.创建数据库 3.安装 MySQL.Data 和MySQL.Data.Entity 3.在项目中添加数据 ...
- Oracle使用中的常规操作总结
写一篇在使用Oracle过程中一些常用的操作,以便于忘记的时候查看 一.创建用户和给用户赋予权限 create user 用户名 identified by 密码; --12c一下版本 create ...
- C# 取得对象属性类型
1.对象 Object obj; 2.对象属性 Type postType = obj.GetType(); PropertyInfo[] postTypeInfos = postType.GetPr ...
- element-ui 上传图片或视频时,先回显在上传
<el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...