wsdl - 修改 Wsdl2Apex 生成的类以处理 xs :extension and imported namespaces

标签 wsdl salesforce apex-code

我在生成 wsdl2apex 代码时遇到问题,主要是因为在我的 WSDL 中使用了 xs:import namespacexs:extension

特别是,我看到了错误 System.CalloutException: Web service callout failed: Unable to parse callout response。找不到元素的 Apex 类型。 . .。 Web 服务返回的原始 SOAP 响应与我预期的一样。

我想修改生成的 Apex 类来解决这个问题,因为服务器端更改 Web 服务不是一个选项。

SOAP 响应如下所示:

<ns:getAccountsResponse>
 <ns:return xsi:type="ax1:AccountReturn">
  <ax2:successful>true</ax2:successful>
  <ax2:transactionId>1000</ax2:transactionId>
  <ax1:Accounts xsi:type="ax1:Account">

对于 ax1 目标命名空间,WSDL 看起来像这样:

<xs:complexType name="AccountReturn">
 <xs:complexContent>
  <xs:extension base="ax100:BaseReturnObject">
   <xs:sequence>
    <xs:element maxOccurs="unbounded" minOccurs="0" name="Accounts" nillable="true" type="ax1:Account"/>
   </xs:sequence>
  </xs:extension>
 </xs:complexContent>
</xs:complexType>

对于 ax2 目标命名空间:

<xs:complexType name="BaseReturnObject">
 <xs:sequence>
  <xs:element minOccurs="0" name="successful" type="xs:boolean"/>
  <xs:element minOccurs="0" name="transactionId" nillable="true" type="xs:integer"/>
 </xs:sequence>
</xs:complexType>

映射到 AccountReturn 的生成的 Apex 类仅包含 ax1 中的 Accounts 字段,但不包含 ax2 中的 BaseReturnObject 字段,因为 wsdl2apex 生成不遵守 xs:extension 或命名空间的导入(基于我的研究)。

有没有办法修改 Apex 类来使这项工作正常进行?我尝试将字段从 BaseReturnObject 添加到 AccountReturn,并修改 field_order_type_info。但是,apex_schema_type_info 似乎只能指向一个命名空间,这可能是 callout 响应的解析仍然失败的原因。

最佳答案

我已经构建了一个工具来自动创建 Apex 类。它包括对 xs:extension 和 xs:import 的支持(以及其他)。

在 ex:extension 的情况下,该工具会将必需的字段从基类拉到子类中,并正确配置 _type_info 成员。

您可以免费获得 - FuseIT SFDC Explorer .目前仅在 Windows 中直接运行。我收到过有人使用 Wine 成功运行它的报告。 (披露:我在发布此工具的公司工作)。

顺便说一句,salesforce.stackexchange.com站点是询问 Salesforce 特定问题的好地方。

关于wsdl - 修改 Wsdl2Apex 生成的类以处理 xs :extension and imported namespaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783420/

相关文章:

soap - 手卷 SOAP 请求

.net - XSD 第一个合约 - WCF Soap Web 服务

salesforce - 如何在 VisualForce 页面中实现 "Save & New"功能

android - Salesforce 移动 sdk 抛出错误 com.android.volley.servererror,基本网络执行请求 201

java - 合并正则表达式中的两个条件

pdf-generation - Salesforce PDF 生成支持哪些字体?

salesforce - 如果记录是唯一的,则添加到列表

xml - 从其他 WSDL 文件引用 xml 模式元素

Python zeep - 绑定(bind)名称以点 (.) 开头时标记名称无效

salesforce - 如何检测 Salesforce 中的环境?