免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1476 | 回复: 0
打印 上一主题 下一主题

转:WebService通用接口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-02 10:19 |只看该作者 |倒序浏览
看到许多中小项目的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:
  1. public class AddRequest extends Request{
  2.    
  3.     private int add;
  4.     private int added;
  5.    
  6.     public int getAdd() {
  7.         return add;
  8.     }
  9.     public void setAdd(int add) {
  10.         this.add = add;
  11.     }
  12.     public int getAdded() {
  13.         return added;
  14.     }
  15.     public void setAdded(int added) {
  16.         this.added = added;
  17.     }
  18.    
  19. }
复制代码
AddResonse:
  1. public class AddResponse extends DataResponse<AddResultData>{

  2.     private AddResultData resultData;

  3.     public AddResultData getResultData() {
  4.         return resultData;
  5.     }

  6.     public void setResultData(AddResultData resultData) {
  7.         this.resultData = resultData;
  8.     }

  9. }
复制代码
AddResultData:
  1. public class AddResultData implements ResultData{

  2.     private int sum;

  3.     public AddResultData(int sum) {
  4.         super();
  5.         this.sum = sum;
  6.     }

  7.     public AddResultData() {
  8.         super();
  9.     }

  10.     public int getSum() {
  11.         return sum;
  12.     }

  13.     public void setSum(int sum) {
  14.         this.sum = sum;
  15.     }
  16. }
复制代码
一个简单的webservice接口:
  1. public class Soap {

  2.    
  3.     public AddResponse add(final AddRequest request){
  4.         return WebServiceTemplate.doResult(new ResultDataCallback<AddRequest,AddResponse,AddResultData>(){

  5.             public AddResultData done() throws Exception {
  6.                 return new AddResultData(request.getAdd()+request.getAdded());
  7.             }

  8.             public AddResponse getRsp() {
  9.                 return new AddResponse();
  10.             }

  11.         });
  12.     }

  13. }
复制代码
一个简单的TestCase测试:
  1. public class TestSoap {

  2.    
  3.     @Test
  4.     public void testAdd(){
  5.         AddRequest add = new AddRequest();
  6.         add.setAdd(1);
  7.         add.setAdded(2);
  8.         
  9.         Soap soap = new Soap();
  10.         AddResponse rsp =soap.add(add);
  11.         assertEquals(3,rsp.getResultData().getSum());
  12.    
  13.         assertEquals("0",rsp.getResultInfo().getResultCode());
  14.         assertEquals("success",rsp.getResultInfo().getResultDesc());
  15.     }

  16. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP