給一份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:

View Code
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:

View Code
public class AddResponse extends DataResponse<AddResultData>{

    private AddResultData resultData;

    public AddResultData getResultData() {
        return resultData;
    }

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

}

  AddResultData:

View Code
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接口:

View Code
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測試:

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

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

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM