從網(wǎng)絡(luò)服務(wù)生成Apex類

使用WSDL2Apex從網(wǎng)絡(luò)服務(wù)生成Apex類

如果某個(gè)網(wǎng)絡(luò)服務(wù)被定義在WSDL文件中,而Salesforce必須使用SOAP和網(wǎng)絡(luò)服務(wù)進(jìn)行通信,則這種情況在某些時(shí)候會(huì)為開發(fā)者帶來很多麻煩。為了簡(jiǎn)化SOAP請(qǐng)求,可以使用Salesforce中提供的功能將此網(wǎng)絡(luò)服務(wù)轉(zhuǎn)化為Apex類。開發(fā)者可以通過此Apex類調(diào)用網(wǎng)絡(luò)服務(wù),而此Apex類可以自動(dòng)生成和編譯XML信息,省去了手動(dòng)設(shè)置的麻煩。

假設(shè)已經(jīng)有了一個(gè)WSDL文件,包含了網(wǎng)絡(luò)服務(wù)的XML描述。在設(shè)置界面中,搜索“Apex 類”,點(diǎn)擊“Apex 類”鏈接,即可進(jìn)入Salesforce中所有Apex類的一覽表。點(diǎn)擊“從WSDL中生成”,在接下來的窗口中上傳文件,并點(diǎn)擊“分析WSDL”按鈕,Salesforce會(huì)自動(dòng)將WSDL中包含的網(wǎng)絡(luò)服務(wù)生成Apex類。

從 WSDL 中生成的新 Apex 代碼

從WSDL中會(huì)生成兩個(gè)類,分別是用于同步和異步請(qǐng)求的,異步請(qǐng)求的類名比同步請(qǐng)求的類名前面多了“Async”。

使用從網(wǎng)絡(luò)服務(wù)生成的Apex類

從WSDL生成的Apex類可以像正常的Apex類一樣被開發(fā)者使用。當(dāng)調(diào)用其中包含的函數(shù)時(shí),便相當(dāng)于發(fā)送了一個(gè)網(wǎng)絡(luò)服務(wù)請(qǐng)求。

測(cè)試從網(wǎng)絡(luò)服務(wù)生成的Apex類

在測(cè)試從網(wǎng)絡(luò)服務(wù)中生成的Apex類中的函數(shù)時(shí),因?yàn)閱卧獪y(cè)試函數(shù)無法調(diào)用真正的網(wǎng)絡(luò)服務(wù),所以開發(fā)者必須自己生成模擬的網(wǎng)絡(luò)服務(wù)請(qǐng)求和結(jié)果。

Salesforce中提供了WebServiceMock接口和Test.setMock()函數(shù)來實(shí)現(xiàn)這一點(diǎn)。

示例:測(cè)試網(wǎng)絡(luò)服務(wù)類

假設(shè)已經(jīng)從WSDL文件中生成了一個(gè)Apex類,名叫“ExampleServiceClass”,其中包含了某個(gè)函數(shù)“ExampleService()”。

開發(fā)者新建了一個(gè)Apex類“ExampleClass”,其中包含了某個(gè)函數(shù)“DoSomething()”來調(diào)用“ExampleServiceClass”類中的“ExampleService()”函數(shù)并處理結(jié)果?,F(xiàn)在要對(duì)“DoSomething()”函數(shù)編寫單元測(cè)試代碼。

  1. 首先建立一個(gè)全局的類,實(shí)現(xiàn)WebServiceMock接口,用于模擬網(wǎng)絡(luò)服務(wù)的請(qǐng)求。代碼如下:
@isTest
global class ServiceCalloutMock implements WebServiceMock {
    // 實(shí)現(xiàn)接口中的doInvoke()函數(shù)
    global void doInvoke(
                        Object stub,
                        Object request,
                        Map<String, Object> response,
                        String endpoint,
                        String soapAction,
                        String requestName,
                        String responseNS,
                        String responseName,
                        String responseType) {
    
    // 接下來,調(diào)用網(wǎng)絡(luò)請(qǐng)求的Apex類中的函數(shù),得到結(jié)果,并將結(jié)果賦值到參數(shù)中的response中。
    // response將作為網(wǎng)絡(luò)請(qǐng)求的回應(yīng)被用到單元測(cè)試中。
    // ...
    
   }
}
  1. 建立單元測(cè)試函數(shù)。代碼如下:
@isTest
static void DoSomethingTest() {
    // 調(diào)用剛才建立的模擬網(wǎng)絡(luò)服務(wù)請(qǐng)求的類
    Test.setMOck(WebServiceMock.class, new ServiceCalloutMock());

    // 測(cè)試函數(shù),得到結(jié)果。模擬的網(wǎng)絡(luò)服務(wù)請(qǐng)求結(jié)果會(huì)在這里被使用,取代了調(diào)用真正的網(wǎng)絡(luò)服務(wù)
    String result = ExampleClass.DoSomething();

    // System.assertEquals(..., result);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 異步Apex類 一個(gè)Apex類可以定義為異步類,用于異步執(zhí)行。 異步類可以通過多種方式實(shí)現(xiàn): Future注解 批...
    程程哥閱讀 685評(píng)論 0 1
  • Salesforce與網(wǎng)絡(luò)服務(wù)的通信 在Salesforce中可以利用Apex類與遠(yuǎn)程站點(diǎn)的網(wǎng)絡(luò)服務(wù)進(jìn)行通信。當(dāng)遠(yuǎn)...
    程程哥閱讀 1,126評(píng)論 0 0
  • 通過Salesforce,我們可以配置或開發(fā)出功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用。與此同時(shí),無論作為管理員還是開發(fā)者,我們都要面對(duì)...
    程程哥閱讀 730評(píng)論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 1 拖延的原則 ①不要玩手機(jī)和開電腦、電視。 ②趁沒開始拖延前,先看看最簡(jiǎn)單的幾個(gè)任務(wù)。 ③把待解決的任務(wù)用小卡...
    貝小淵閱讀 154評(píng)論 0 1

友情鏈接更多精彩內(nèi)容