从网络服务生成Apex类

使用WSDL2Apex从网络服务生成Apex类

如果某个网络服务被定义在WSDL文件中,而Salesforce必须使用SOAP和网络服务进行通信,则这种情况在某些时候会为开发者带来很多麻烦。为了简化SOAP请求,可以使用Salesforce中提供的功能将此网络服务转化为Apex类。开发者可以通过此Apex类调用网络服务,而此Apex类可以自动生成和编译XML信息,省去了手动设置的麻烦。

假设已经有了一个WSDL文件,包含了网络服务的XML描述。在设置界面中,搜索“Apex 类”,点击“Apex 类”链接,即可进入Salesforce中所有Apex类的一览表。点击“从WSDL中生成”,在接下来的窗口中上传文件,并点击“分析WSDL”按钮,Salesforce会自动将WSDL中包含的网络服务生成Apex类。

从 WSDL 中生成的新 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);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异步Apex类 一个Apex类可以定义为异步类,用于异步执行。 异步类可以通过多种方式实现: Future注解 批...
    程程哥阅读 3,764评论 0 1
  • Salesforce与网络服务的通信 在Salesforce中可以利用Apex类与远程站点的网络服务进行通信。当远...
    程程哥阅读 4,019评论 0 0
  • 通过Salesforce,我们可以配置或开发出功能强大的网络应用。与此同时,无论作为管理员还是开发者,我们都要面对...
    程程哥阅读 3,865评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,795评论 1 32
  • 1 拖延的原则 ①不要玩手机和开电脑、电视。 ②趁没开始拖延前,先看看最简单的几个任务。 ③把待解决的任务用小卡...
    贝小渊阅读 838评论 0 1