首页 > 网站 > WEB开发 > 正文

Webservice接口通用实现方法分享

2024-04-29 21:01:10
字体:
来源:转载
供稿:网友

看到许多中小项目的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.      

 

 

AddResonse:

 

  1. public class AddResponse extends DataResponse<AddResultData>{ 
  2.  
  3.     private AddResultData resultData; 
  4.  
  5.     public AddResultData getResultData() { 
  6.         return resultData; 
  7.     } 
  8.  
  9.     public void setResultData(AddResultData resultData) { 
  10.         this.resultData = resultData; 
  11.     } 
  12.  

AddResultData:

  1. public class AddResultData implements ResultData{ 
  2.  
  3.     private int sum; 
  4.  
  5.     public AddResultData(int sum) { 
  6.         super(); 
  7.         this.sum = sum; 
  8.     } 
  9.  
  10.     public AddResultData() { 
  11.         super(); 
  12.     } 
  13.  
  14.     public int getSum() { 
  15.         return sum; 
  16.     } 
  17.  
  18.     public void setSum(int sum) { 
  19.         this.sum = sum; 
  20.     } 

一个简单的webservice接口:

  1. public class Soap { 
  2.  
  3.      
  4.     public AddResponse add(final AddRequest request){ 
  5.         return WebServiceTemplate.doResult(new ResultDataCallback<AddRequest,AddResponse,AddResultData>(){ 
  6.  
  7.             public AddResultData done() throws Exception { 
  8.                 return new AddResultData(request.getAdd()+request.getAdded()); 
  9.             } 
  10.  
  11.             public AddResponse getRsp() { 
  12.                 return new AddResponse(); 
  13.             } 
  14.  
  15.         }); 
  16.     } 
  17.  

一个简单的TestCase测试:

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

虽然这些很简单,但是能够解决80%的问题。剩下20%还要根据实际情况来定。况且,这些代码在你的手中还有持续改优化的空间。千万不要做一个爱Copy的孩子。

相关的代码附件地址:【http://files.cnblogs.com/MartinChen999/webservice.rar】

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表