转:WebService通用接口
看到许多中小项目的webservice接口的源代码,不禁有个吐槽的冲动。除了会用CXF,Axis2等神级框架,其他的懒得动了,都是Ctrl+V,Ctrl+C,把其他模块的Request,Response贴过来。一旦增加某个特性,不得不在所有Request,Response遨游一遍。早知今日,何必当初呢。
写一个好的Weservice Interface,关键是要多多总结。除了有Request,Response之外,还有很多。总结如下有:
Request:webservice的输入。
Response:webservice输出。
DataRsponse:带结果集的webservice输出。
ResultData:结果集,不同的interface,其ResultData不一样。
ReslutInfo:描述调用请求成功或者失败的对象。
WebServiceTemplate:模板类,定义如何调用下层函数,如何处理异常错误的流程
ResultDataCallback:回调类,与template配合,适用【返回结果集】操作,比如【获取用户信息】,【下订单】
ResultCallback:回调类,与Template配置,适用于【不返回带结果集的接口,比如【修改用户名】
ResponseFactory:用来组装 webservice消息 的工厂类。
ResultInfoFactory:用来处理异常信息的 工厂类,这个一个接口,为它实现一个默认实例吧。
有了这些小弟们,任何webservice接口的定义都能轻易搞定,不信我举个例子给你,咱们以【加法】为例!
AddRequest:
public class AddRequest extends Request{ private int add;
private int added; public int getAdd() {
return add;
}
public void setAdd(int add) {
this.add = add;
}
public int getAdded() {
return added;
}
public void setAdded(int added) {
this.added = added;
} }
AddResonse:
public class AddResponse extends DataResponse<AddResultData>{ private AddResultData resultData; public AddResultData getResultData() {
return resultData;
} public void setResultData(AddResultData resultData) {
this.resultData = resultData;
} }
AddResultData:
public class AddResultData implements ResultData{ private int sum; public AddResultData(int sum) {
super();
this.sum = sum;
} public AddResultData() {
super();
} public int getSum() {
return sum;
} public void setSum(int sum) {
this.sum = sum;
}
}
一个简单的webservice接口:
public class Soap { public AddResponse add(final AddRequest request){
return WebServiceTemplate.doResult(new ResultDataCallback<AddRequest,AddResponse,AddResultData>(){ public AddResultData done() throws Exception {
return new AddResultData(request.getAdd()+request.getAdded());
} public AddResponse getRsp() {
return new AddResponse();
} });
} }
一个简单的TestCase测试:
public class TestSoap { @Test
public void testAdd(){
AddRequest add = new AddRequest();
add.setAdd(1);
add.setAdded(2); Soap soap = new Soap();
AddResponse rsp =soap.add(add);
assertEquals(3,rsp.getResultData().getSum()); assertEquals("0",rsp.getResultInfo().getResultCode());
assertEquals("success",rsp.getResultInfo().getResultDesc());
} }
虽然这些很简单,但是能够解决80%的问题。剩下20%还要根据实际情况来定。况且,这些代码在你的手中还有持续改优化的空间。千万不要做一个爱Copy的孩子。
转:WebService通用接口的更多相关文章
- C#动态webservice调用接口 (JAVA,C#)
C#动态webservice调用接口 using System; using System.Collections; using System.IO; using System.Net; using ...
- 一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们明确了我们的"规范和约定". 从 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...
- SoapUI SoapUI测试WebService协议接口简介
SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...
- (二)使用CXF开发WebService服务器端接口
CXF作为java领域主流的WebService实现框架,Java程序员有必要掌握它. CXF主页:http://cxf.apache.org/ 简介:百度百科 今天的话,主要是用CXF来开发下Web ...
- Atitit 通用接口的设计与实现attilax 总结
Atitit 通用接口的设计与实现attilax 总结 1.1. 现存的情况1 1.2. 接口返回类型,与返回序列化格式1 1.3. 异常传递 代替返回值模式1 1.4. 通用接口原理1 1.5. A ...
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...
- PyNN:神经网络模拟器的通用接口
PyNN:神经网络模拟器的通用接口 计算神经科学已经产生了用于模拟神经元网络的多样化软件,同时具有消极和积极的后果.一方面,每个模拟器都使用自己的编程或配置语言,导致将模型从一个模拟器移植到另一个模拟 ...
- [转载]Linux驱动-SPI驱动 之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...
随机推荐
- python 获取脚本所在目录
平时写python经常会想获得脚本所在的目录,例如有个文件跟脚本文件放在一个相对的目录位置,那就可以通过脚本文件的目录找到对应的文件,即使以后脚本文件移到其他地方,脚本也基本不需要改动(相对于写死目录 ...
- Python学习07——字典(2)
笨办法学Python第40节,上次用的第三版的书,这次是第四版的书. 这一节的代码如下: cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'J ...
- C#按行读取文本并存放再数组内
我只想说真的是日了狗的麻烦,代码就那么几行,但是根本看不懂在搞些什么东西,我现在还是一点都不知道getline函数到底是怎么用的,但是事实就是他确实能用. 期间在那该死的第一个char根本不知道为什么 ...
- number 数据类型的分析。
在js中,number数据类型可能算最令人关注的的类型之一了. number类型分为整数和浮点数. 一,整型数,整型又分为十进制,八进制,十六进制. 十进制即是生活中接触到的:而八进制数的首位必须是零 ...
- json处理总结(前端js和后端java)
前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...
- 【转】Linux查看机器负载
转自 http://blog.csdn.net/szchtx/article/details/38455385 感谢 负载(load)是Linux机器的一个重要指标,直观了反应了机器当前的状态.如果机 ...
- Ubuntu下freeradius-server的安装
一.安装 (1)更新 #apt-get update (2)下载 链接:ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.9. ...
- EF快速开发定义数据接口类(转)
using System; using System.Linq; using System.Linq.Expressions; using System.Data.Objects; namespace ...
- 0x7c95caa2指令引用的0x00000000内存 该内存不能read
出现这样的错误,往往和动态库有关系! 解决方法:
- maven项目管理利器
一.maven介绍及环境搭建 maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. maven可以更有效的管理项目,也是一套功能强大的自动化管 ...