SOAP Services: Defining a Class from a WSDL Document

DEX455 - Apex 集成与工具完全指南:Callouts、命名凭据、WSDL2Apex、Mock 测试

📄 第 366 页 🎬 视频课程

课程章节介绍

同学们,今天我们来看看怎么用Apex和外部Web服务集成,特别是SOAP类型的服务。先说一下,在Salesforce里,如果我们想把外部系统提供的一个SOAP Web服务变成可以在Apex里直接调用的方法,那就可以借助WSDL文档来帮我们自动生成对应的Apex类,这个过程就叫WSDL2Apex。 那什么是WSDL呢?WSDL全称是Web服务描述语言,你可以把它看成是Web服务的“说明书”。它用XML格式写清楚了服务有哪些操作、要传什么参数、返回什么结果,还定义了数据类型。我们只要拿到这份用XML写的WSDL文件,把它保存在本地硬盘上,或者从网络地址直接引入,Salesforce就可以帮我们生成一组Apex类。这些类里封装好了请求和响应的结构,也提供了可直接调用的方法,这样开发人员完全不用手写复杂的SOAP报文发送逻辑,直接像调用本地方法一样去调用远程服务就可以了。 具体操作很简单,在开发者控制台或者Setup里,进入Apex类,选择“从WSDL生成”,然后上传WSDL文件,系统就会自动解析并生成对应的Apex代码。生成出来的代码里会有一些代表复杂类型的内部类,还有调用服务的主方法。之后在你的业务逻辑里,只要new一个请求对象,填好参数,再调用生成的invoke方法,就能拿到返回结果。 不过这里有个很重要的实践建议,大家一定要记住:在考虑集成方案时,尽量优先使用Salesforce原生的消息传递机制,比如平台事件、Change Data Capture等异步消息通道来实现系统间的联动。为什么这样推荐呢?因为这些方式能更好地利用平台的高可用性,避免因为外部服务不稳定而拖慢我们整个事务。只有当你确实需要从Salesforce主动去调用一个外部第三方提供的SOAP服务,并且没有其他更合适的替代方案时,才去使用这种基于WSDL的标注调用。简单说就是,能用内部事件解耦的就不要轻易去碰实时同步标注,能用平,立的消息机制处理的,就不要轻易依赖外部调用。这样能让你整体的集成架构更可靠,也更易于维护。 好,这个部分的核心就两点:一是会用WSDL自动生成Apex代理类来调SOAP服务,二是懂得在合适的场景下选择最稳妥的集成方式。接下来我们演示一下生成过程和代码示例。

关键词

Apex Salesforce Developer Guide