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);
		}

		//.....
		//其它代码
		//.......
}

  

 

  

 

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

时间: 2024-10-13 04:33:09

Ofbiz项目学习——阶段性小结——服务返回结果的相关文章

Ofbiz项目学习——阶段性小结——删除数据

一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Object> deleteUomByPrimaryKey( DispatchContext dctx, Map<String,Object> context){ //取得实体引擎实例 GenericDelegator delegator = dctx.getDelegator(); //TODO

UI学习阶段性小结

#pragma mark  UI阶段性小结 //    UI(User Interface)用户界面 //    iOS App = 各种各样的UI控件 + 业务逻辑和算法 #pragma mark  一.UIView.UILabel.UIWindow #pragma mark  1.frame是一个结构体,包含2个部分的内容:origin(x和y)和Size(width和height) #pragma mark  2.bounds(边界)是view的重要属性 //    用于定义自己的边界,同

OC学习阶段性小结

/*一.1.OC是一门面向对象的语言.扩展了标准C语言的类与接口.OC能完成的操作:定义新的类.类的实例和方法.方法调用(成为发消息).属性声明(以及通过他们自动合成存取方法).静态和动态类型化.块(block)已封装的 可在任何时候执行的多段代码.基本语言的扩展,例如协议和类别. 2.面向对象编程也叫做面向接口编程,简称:OOP(Object Oriented Programming). 3.类和对象是面向对象的核心. 4.类:具有相同特征和行为的事物的抽象. 5.面向对象的三大特征:封装.继

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳闸,保护家用电器). 使用步骤:(仍然在之前的示例代码上加以改造) 一.添加hystrix依赖 compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 二.在需要熔断的方法上添加注解 package com.cnblogs.y

[Python]webservice 学习(1) -- 简单服务和调用

由于项目中需要用到webservice来做接口,于是花点时间先做知识储备. 开始的时候觉着这个webservice就是一个http请求啊,服务端监听,客户端发送xml报文,然后解析下发送了什么内容,返回响应的数据. 这是百度百科对webservice的定义,一般使用wsdl来描述服务. 后来我的误区就是 wsdl的xml  和 用http 请求组成的xml也就是用soap来请求webservice, 这两种xml为啥不一样... 困惑: 看了些资料以后才明白,wsdl就是你发布的webservi

Symfony2 学习笔记之服务容器

现在的PHP应用程序都是面向对象开发,所以主要是由对象构成.有的对象可以方便的分发邮件信息而有的可能帮你把信息写入到数据库中.在你的应用程序中,你可能创建一个对象用于管理你的产品库存,或者另外一个对象处理来自第三方API的数据.重要的是现在应用程序要做的这些事情都是被组织到许许多多的对象中来处理它的每一项任务的. 我们将套路一下Symfony2中一个特殊的PHP对象,它帮助我们实例化,组织和获取你应用程序汇总的许多对象.这个对象叫做服务容器,它可以帮助你使用标准统一的方式来创建你程序中的对象.它

DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

[概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效.今天特意写篇blog来记录我的心得与大家分享. [功能实现说明] 沿用上次的草图 目前DEMO图上的功能都已经实现.下面谈谈各部分的实现. 通信服务, 由DIOCP实现,担当与客户端的通信工作

项目中客户端,服务端验证,数据库联合唯一约束,事务管理。

项目中有个需求,发布一个活动,记录下参加该活动的id和参与人id,同时调用接口,往收藏夹中添加一条记录,往交易表中添加一条记录.最后根据返回的结果,给出不同的提示信息. 1.如果当前的在jsp页面上面做处理,判断是否参与过.参加过之后,参加按钮不可点.没有参加的情况,参加按钮可以点. 2.jsp客户端加上js处理,参加按钮点击完之后,按钮不可点. 3.在controller中,业务逻辑开始前,再次java判断是否参加过该活动. 4.在数据库中参与表(活动id,参与人id)加上联合唯一约束.根据异

【Spring学习笔记-MVC-4】返回Json数据-方式2

摘要 本文讲解另外一种利用spring MVC返回json数据的方法. 前文回顾 在<[Spring学习笔记-MVC-3]返回Json数据-方式1>中介绍了通过: @ResponseBody声明返回值: 配置<mvc:annotation-driven />: 来返回json数据.效果如下:   ==>, 从上面的效果看,只能返回一个对象,不能返回多个对象,不能做到形如下图的返回结果, 存在局限性(可能可以返回多个,自己不知道如何实现). 下面介绍的方式2,利用spring