天天看點

從網絡服務生成Apex類使用WSDL2Apex從網絡服務生成Apex類使用從網絡服務生成的Apex類測試從網絡服務生成的Apex類

使用WSDL2Apex從網絡服務生成Apex類

如果某個網絡服務被定義在WSDL檔案中,而Salesforce必須使用SOAP和網絡服務進行通信,則這種情況在某些時候會為開發者帶來很多麻煩。為了簡化SOAP請求,可以使用Salesforce中提供的功能将此網絡服務轉化為Apex類。開發者可以通過此Apex類調用網絡服務,而此Apex類可以自動生成和編譯XML資訊,省去了手動設定的麻煩。

假設已經有了一個WSDL檔案,包含了網絡服務的XML描述。在設定界面中,搜尋“Apex 類”,點選“Apex 類”連結,即可進入Salesforce中所有Apex類的一覽表。點選“從WSDL中生成”,在接下來的視窗中上傳檔案,并點選“分析WSDL”按鈕,Salesforce會自動将WSDL中包含的網絡服務生成Apex類。

從網絡服務生成Apex類使用WSDL2Apex從網絡服務生成Apex類使用從網絡服務生成的Apex類測試從網絡服務生成的Apex類

從WSDL中會生成兩個類,分别是用于同步和異步請求的,異步請求的類名比同步請求的類名前面多了“Async”。

使用從網絡服務生成的Apex類

從WSDL生成的Apex類可以像正常的Apex類一樣被開發者使用。當調用其中包含的函數時,便相當于發送了一個網絡服務請求。

測試從網絡服務生成的Apex類

在測試從網絡服務中生成的Apex類中的函數時,因為單元測試函數無法調用真正的網絡服務,是以開發者必須自己生成模拟的網絡服務請求和結果。

Salesforce中提供了WebServiceMock接口和Test.setMock()函數來實作這一點。

示例:測試網絡服務類

假設已經從WSDL檔案中生成了一個Apex類,名叫“ExampleServiceClass”,其中包含了某個函數“ExampleService()”。

開發者建立了一個Apex類“ExampleClass”,其中包含了某個函數“DoSomething()”來調用“ExampleServiceClass”類中的“ExampleService()”函數并處理結果。現在要對“DoSomething()”函數編寫單元測試代碼。

  1. 首先建立一個全局的類,實作WebServiceMock接口,用于模拟網絡服務的請求。代碼如下:
@isTest
global class ServiceCalloutMock implements WebServiceMock {
    // 實作接口中的doInvoke()函數
    global void doInvoke(
                        Object stub,
                        Object request,
                        Map<String, Object> response,
                        String endpoint,
                        String soapAction,
                        String requestName,
                        String responseNS,
                        String responseName,
                        String responseType) {
    
    // 接下來,調用網絡請求的Apex類中的函數,得到結果,并将結果指派到參數中的response中。
    // response将作為網絡請求的回應被用到單元測試中。
    // ...
    
   }
}                
  1. 建立單元測試函數。代碼如下:
@isTest
static void DoSomethingTest() {
    // 調用剛才建立的模拟網絡服務請求的類
    Test.setMOck(WebServiceMock.class, new ServiceCalloutMock());

    // 測試函數,得到結果。模拟的網絡服務請求結果會在這裡被使用,取代了調用真正的網絡服務
    String result = ExampleClass.DoSomething();

    // System.assertEquals(..., result);
}                

轉載于:https://www.cnblogs.com/chengcheng0148/p/generate_apex_class_from_webservice.html