转: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定义了 ...
 
随机推荐
- #Deep Learning回顾#之2006年的Science Paper
			
大家都清楚神经网络在上个世纪七八十年代是着实火过一回的,尤其是后向传播BP算法出来之后,但90年代后被SVM之类抢了风头,再后来大家更熟悉的是SVM.AdaBoost.随机森林.GBDT.LR.FTR ...
 - 为Informix数据库开启事务
			
1.首先在Informix数据库安装根目录的etc文件夹下找到名为ONCONFIG.on_xxxx的配置文件: 2.打开ONCONFIG.on_xxxx文件,在第409行的位置找到TAPEDEV \\ ...
 - Levenberg-Marquardt算法基础知识
			
Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼ 什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使 ...
 - C++用法的学习心得(要求包含示例,并反映出利用网络获取帮助的过程)
			
大一一年C++的学习生涯,让我感慨颇多!回想起,当初上课时的情形,一切是那么的清晰,仿佛就像是发生在昨天一样. 任何一门学科的学习都是有技巧的.对于c++,我学的并不好,刚开 ...
 - c语言操作一维数组-3
			
C语言选择题#includemain(){double a[15],k;k=fun(a);} 则以下选项中错误的fun函数首部是 ( D)A.double fun(double a[15]) B.do ...
 - 用Window Authentication的方式去连接SQLServer
			
用Window Authentication的方式去连接SQLServer Connection String: jdbc:sqlserver://${serverName};databaseName ...
 - testlink安装
			
今天安装了一下testlink,完全按照高峻博客里的做法,最后安装成功了 遇到的问题: 问题表现: 新安装TestLink,登录Testlink后,新建一个项目后,会出现如下提示: There are ...
 - Win7 64位ORACLE取数字乱码的解决
			
参见网址http://www.2cto.com/database/201304/201767.html 首先是PLSQL DEVELOPER 直接报错 NLS_LANG 错误 第一步是在命令行下测试 ...
 - 译:Boost Property Maps
			
传送门:Boost Graph Library 快速入门 原文:Boost Property Map 图的抽象数学性质与它们被用来解决具体问题之间的主要联系就是被附加在图的顶点和边上的属性(prope ...
 - [转] 使用反射机制控制Toast的显示时间
			
大体上说就是利用toast的内部类TN 来控制show和hide ,这是一个反射机制 怎么控制toast的显示时间呢?这个就是通过tn类的show和hide的方法 http://blog.csdn.n ...