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的孩子。


0 0