Interface 03 - Apex SOAP Callouts

198 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Use WSDL2Apex to Generate Apex Code】:
除了REST的callouts,Apex也可以用XML给SOAP web services发送callouts。和SOAP工作是个痛苦却又必须的经历。幸运的是,我们有工具来让这一切变得简单。

通过一个WSDL文档,WSDL2Apex能够自动创建Apex类。下载web service的WSDL文件,然后你上传WSDL和WSDL2Apex来为你创建Apex类。这个Apex类创建SOAP XML,传递数据,把response XML分析到Apex类里。你不用自己开发用来创建和分析包含web service的信息的XML的逻辑代码,就用由WSDL2Apex创建的Apex类就可以了。

注意:尽可能使用outbound messaging来处理集成解决方案。在必要的时候,对第三方web services使用callout。

在这个例子里,我们使用一个简单的计算器web service来处理两个数的和。第一步,我们需要把WSDL文件下载下来然后生成Apex类。下载连接:th-apex-soap-service.herokuapp.com/assets/calc…

Generate an Apex Class from the WSDL】:
Setup | Apex Classes | Generate from WSDL | Choose File | Parse WSDL。

这个例子里我们可以使用默认的类名。但是在实际工作中,我们建议你们改成有意义的名字。

WSDL2Apex的解析是不稳定的。分析会在很多愿意下失败,比如不支持的类型,重复绑定,或者不知道的元素。不幸的是,你可能需要手动的编写Apex代码来调用web service或者使用HTTP。

点击Generate Apex code。向导的最后一步会显示创建的类,如果有错误也会显示。这个页面也会提供一个查看被成功创建代码的链接。

创建的Apex类包含了用于调用第三方web service的stub和type。这些类让你能够通过Apex调用外部系统的web service。对于每一个被创建的类来说,第二个类会以同样的名字被创建,并且有一个前缀Async。名字为calculatorServices的类是用于同步的callouts。名字为AsyncCalculatorServices的是用于处理异步的callouts。

Execute the Callout】:
在你运行这个例子之前,请先认证这个web service callout的endpoint URL(th-apex-soap-service.herokuapp.com)。方法请参照[2.1 Apex Integration Overview]的内容。

在Developer Console | Debug |  Open Execute Anonymous Window出执行下列代码。

calculatorServices.CalculatorImplPort calculator = new calculatorServices.CalculatorImplPort();
Double x = 1.0;
Double y = 2.0;
Double result = calculator.doAdd(x, y);
System.debug(result);

点击Debug Only查看系统输入LOG。

Test Web Service Callouts】:

所有有经验的Apex开发者都知道,要想发布Apex代码,需要有至少75%的代码测试覆盖率。这也包含由WSDL2Apex创建的代码。你可以听说了,测试方法不支持web service callouts。为了防止测试类失败并且增加代码覆盖率,Apex提供了built-in的WebServiceMock接口和Test.setMock方法。你可以在测试类里用这个接口来接收一个假的responses。

Specify a Mock Response for Callouts】:
请参照原来来做一个假的responses。