使用OAuth连接Apigee获取认证令牌时遇XMLToJSON错误求助
排查Salesforce连接Apigee获取令牌时的XMLToJSON错误
针对你遇到的{"fault":{"faultstring":"XMLToJSON[Products-to-JSON]: Source AccessEntity.ChildNodes.Access-App-Info.App.Credentials.Credential.ApiProducts is not available","detail":{"errorcode":"steps.xml2json.SourceUnavailable"}}}错误,结合Postman能正常工作的情况,我整理了几个核心排查方向:
1. 对比Postman与Salesforce收到的XML响应结构
这个错误本质是XMLToJSON转换时找不到指定的节点路径,大概率是Apigee返回给Salesforce的XML和Postman收到的存在差异:
- 在Salesforce中调试获取Apigee返回的原始XML(比如通过
HttpRequest.getBody()获取响应体,或者开启调试日志查看)。 - 把这个XML和Postman里收到的XML做对比,重点检查
AccessEntity.ChildNodes.Access-App-Info.App.Credentials.Credential.ApiProducts这个节点是否存在,同时留意节点名称的大小写、连字符/下划线、层级结构是否完全匹配。
2. 检查XMLToJSON政策的配置(如果在Apigee侧)
如果这个XMLToJSON是Apigee流里的政策,那么需要确认:
- 政策的
Source配置的路径是否和Apigee内部生成的XML结构一致?会不会是Salesforce的请求触发了Apigee流的不同分支,导致前置步骤没有生成包含ApiProducts节点的XML? - 可以在Apigee启用调试会话,分别查看Postman和Salesforce请求的处理流程,对比XMLToJSON政策执行时的输入XML内容。
3. 验证Salesforce端的请求细节与Postman完全一致
Postman能成功而Salesforce失败,往往是请求的细节差异导致的:
- 对比两者的请求头:比如
Content-Type、Accept、Authorization等是否完全相同?Salesforce的HttpRequest可能会默认添加一些额外头,比如User-Agent,这可能影响Apigee的响应逻辑。 - 对比请求参数:比如
grant_type、client_id、client_secret等参数的取值、编码格式是否一致?确保Salesforce没有对参数做额外的转义或者格式转换。
4. 再次确认Remote Site Settings的完整性
虽然你已经添加了令牌URL,但仍需检查:
- Remote Site的URL是否包含了令牌端点的完整路径?比如如果Apigee的令牌URL是
https://your-apigee-domain/oauth/token,不能只添加https://your-apigee-domain。 - 确认Remote Site的协议(HTTP/HTTPS)与实际请求一致,且状态为Active。
5. 排查Salesforce端的XML解析逻辑(如果是本地转换)
如果是Salesforce自己在做XML转JSON,要检查解析代码的路径是否正确:
- 比如使用
Dom.Document解析时,是否正确处理了XML的命名空间?如果Apigee返回的XML带有命名空间,直接按无命名空间的路径查找会找不到节点。 - 确保解析代码中的节点路径和XML的实际层级完全匹配,比如有没有漏写某个父节点。
内容的提问来源于stack exchange,提问作者ParoTech
相关产品推荐
相关产品推荐

