1. 程式人生 > >WebService 介面開發與訪問

WebService 介面開發與訪問

@WebService(name = "fruit")
@Controller
public class WsWebService extends SpringBeanAutowiringSupport{

    @SuppressWarnings("static-access")
    @WebMethod
    public Object getListByType(@WebParam(name = "userid",@WebParam(name = "type") String type) String userid, 
            ) throws Exception {
        Map<String, Object> mapReturn = new HashMap<String, Object>();
        mapReturn.put("apple ", 108);
        mapReturn.put("pear ", 120);
        mapReturn.put("apricot ", 128);
        mapReturn.put("peach ", 130);
      
        return XmlHelper.map2Xmlstring(mapReturn);//返回xml格式資料
    }

 
     public static void main(String[] args)  {
     
        try {
            //請求webservice介面
            URL url = new URL("http://127.0.0.1:8880/project/services/fruit?wsdl");  //webservice 介面地址
            Service service = new Service();
            Call call = (Call)service.createCall();
            call.setTargetEndpointAddress(url);
            call.setOperationName("getListByType");  //方法名,和請求介面方法名稱一致
            call.setTimeout(100000);
            //引數新增引數,引數順序,型別,必須和呼叫介面的服務端同步。不然會報unexpected element (uri:"",                                         local:"appmark"). Expected elements are <{}jsonStr> 
            call.addParameter("userid",XMLType.XSD_STRING, ParameterMode.IN);
            call.addParameter("type",XMLType.XSD_STRING, ParameterMode.IN);
                
            call.setReturnType(XMLType.XSD_STRING);
            call.setUseSOAPAction(true);
            //這是的順序和引數名稱一一對應。
            Object obj [] =new Object[] {"userid","type"};//請求引數
            String ret = null;
            ret = (String) call.invoke(obj);
            logger.info("getApasInfoCount Count===="+ret);                    
        } catch (Exception e) {
            e.printStackTrace();
        } 

    }

}

 

PS:

一、WebService到底是什麼?

先來看下標準的定義:Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在Web上提供的軟體服務,使用WSDL檔案進行說明,並通過UDDI進行註冊。

其實,一言以蔽之:WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。

還可以從多個角度來理解WebService,從表面看,WebService就是一個應用程式向外界暴露出一個能通過Web進行呼叫的API,也就是說能用程式設計的方法通過Web來呼叫這個應用程式。我們把呼叫這個WebService的應用程式叫做客戶端,而把提供這個WebService的應用程式叫做服務端。從深層次看,WebService是建立可互操作的分散式應用程式的新平臺,是一個平臺,是一套標準。它定義了應用程式如何在Web上實現互操作性,你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。

二、WebService平臺技術

SOAP、WSDL、UDDI(UniversalDescriptionDiscovery andIntegration)三者構成了WebService的三要素。下面,詳細闡述這三大技術:

  • SOAP

    WebService通過HTTP協議傳送請求和接收結果時,傳送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP訊息頭,以說明HTTP訊息的內容格式,這些特定的HTTP訊息頭和XML內容格式就是SOAP協議。SOAP提供了標準的RPC方法來呼叫Web Service。 
    SOAP協議組成: 
    SOAP協議 = HTTP協議 + XML資料格式 
    SOAP協議定義了SOAP訊息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XML和XSD的,XML是SOAP的資料編碼方式。打個比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防護欄,SOAP就是普通公路經過加隔離帶和防護欄改造過的高速公路。

  • WSDL

    好比我們去商店買東西,首先要知道商店裡有什麼東西可買,然後再來購買,商家的做法就是張貼廣告海報。 WebService也一樣,WebService客戶端要呼叫一個WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裡有什麼方法可以呼叫,所以,WebService務器端首先要通過一個WSDL檔案來說明自己家裡有啥服務可以對外呼叫,服務是什麼(服務中有哪些方法,方法接受的引數是什麼,返回值是什麼),服務的網路地址用哪個url地址表示,服務通過什麼方式來呼叫。 
    WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述Web Service及其函式、引數和返回值。它是WebService客戶端和伺服器端都能理解的標準格式。因為是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的Web service生成WSDL文件,又能匯入WSDL文件,生成呼叫相應WebService的代理類程式碼。

  • UDDI

    UDDI (Universal Description, Discovery, and Integration) 是一個主要針對Web服務供應商和使用者的新專案。在使用者能夠呼叫Web服務之前,必須確定這個服務內包含哪些商務方法,找到被呼叫的介面定義,還要在服務端來編制軟體,UDDI是一種根據描述文件來引導系統查詢相應服務的機制。UDDI利用SOAP訊息機制(標準的XML/HTTP)來發布,編輯,瀏覽以及查詢註冊資訊。它採用XML格式來封裝各種不同型別的資料,並且傳送到註冊中心或者由註冊中心來返回需要的資料。