Unsupported WSDL Features

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

📄 第 374 页 🎬 视频课程

课程章节介绍

今天我们来聊一个Apex开发中非常实际的话题——当你用WSDL文件生成Apex代码的时候,有哪些“坑”是我们要绕开的。 首先想象一下,WSDL文件就像一份“合同”,描述了外部系统提供什么样的服务、怎么去调用它。Salesforce的Apex可以用工具把这份合同翻译成一堆Apex类,方便我们直接调用。但这个翻译工具并不万能,它有一些严格的限制,我们得提前知道,避免白费功夫。 第一个不支持的情况是,PRC/编码服务,。这听起来有点技术,简单说就是一种老式的、把数据类型编码进调用里的方式。如果你手里的WSDL里有这种服务,Apex是认不出的,直接会报错。 第二个要小心的,是,一个WSDL里有多个portTypes、多个服务或者多个绑定,。啥意思呢?PortType可以理解为“接口”,一些WSDL会在一份文件里定义好几个接口,或者有好几种不同的服务地址和协议绑定。但Salesforce的解析工具比较“专一”,它只能处理一个服务、一个绑定、一个portType的情况。如果你的WSDL里定义了多个,你只能先拆开,让每一份都只保留一个,不然解析会失败。 还有就是,导入外部架构,这件事。很多WSDL为了复用结构,会引用外部的XSD文件来定义数据类型。这个操作Apex是不接受的——它看不懂“请去那里找”这种指引。但有个小技巧:如果你真的需要那个外部的架构,你可以打开它,把里面的内容,直接复制粘贴到你的主WSDL里,,只要东西都在同一个文件里,Apex就能认。不过这要求你都放在同一个架构命名空间下,跨命名空间的引用还是不行。 ,类型映射,也是一个坑。Salesforce内部有个“翻译表”,能把WSDL里的XML数据类型(比如xsd:string)自动映射成Apex类型(比如String)。但是如果你的WSDL里用了什么怪类型,或者非常复杂的嵌套,而这个类型不在它支持的清单里,那生成代码就会失败。遇到这种情况,我们可能得考虑手动简化类型,或者用字符串去模拟。 ,WSDL文件的大小,也有限制。因为Salesforce里可以用WLSL文件(就是WSDL对应的Apex stub代码),但Apex代码本身有大小限制。如果你生成的Apex类太大了,超过了限制,毫无疑问会失败。这通常发生在非常庞大的WSDL上。 最后一个,注意WSDL的,文档字面量包装风格,,这个术语听着拗口。简单说,这是Web服务调用时消息怎么打包的一种方式。通常大家会使用“文档-字面量-被包装”这种风格,而有些系统可能生成“文档-字面量-裸”或者其他变种。如果WSDL的包装风格不是“被包装”的,那Apex解析的时候就会卡住,直接报错。所以拿到WSDL第一步,最好先确认下它的style和 use属性是不是符合要求。 总结一下,如果你想成功用WSDL生成Apex代码,就得保证:它是一个单服务、单绑定、单portType的文件,没有外部导入,类型都是Salesforce认识的,大小不会撑爆Apex限制,并且使用的是文档字面量包装风格。遇到不符合的,就按我们刚才讲的那些方法提前“修剪”一下WSDL。 这些限制听起来有点多,但提前了解了,就能避免调试时抓狂。实战中,我们通常会对WSDL做必要的清洗,然后再喂给Salesforce。现在你心里有数了吗?下次咱们就动手练一练怎么清洗WSDL。

关键词

Apex Salesforce Developer Guide