从 Force.com 调用 Web 服务时,我得到:
System.CalloutException:Web 服务标注失败:意外元素。解析器期待元素 'http://schemas.xmlsoap.org/soap/envelope/:Envelope' 但发现 ':HTML'
另一端的网络人员要求查看 Salesforce 从他们的服务器获得的完整响应。
有没有办法做到这一点?我尝试使用匿名执行的调试级别“最佳”运行,但这会产生相同的小消息,没有进一步的细节。
从 Force.com 调用 Web 服务时,我得到:
System.CalloutException:Web 服务标注失败:意外元素。解析器期待元素 'http://schemas.xmlsoap.org/soap/envelope/:Envelope' 但发现 ':HTML'
另一端的网络人员要求查看 Salesforce 从他们的服务器获得的完整响应。
有没有办法做到这一点?我尝试使用匿名执行的调试级别“最佳”运行,但这会产生相同的小消息,没有进一步的细节。
不要忘记 Apex 包含一个 HttpRequest 类,它作为比 SOAP API 更低的层工作。您应该能够编写一个测试方法,将硬编码的 XML 请求发送到服务器并转储 HttpResponse 以便您可以看到它。
您收到的消息是因为在 Saleforce 尝试解析响应时生成了一个错误,并且不幸的是它没有被记录。
解析错误正在发生,因为您得到的不是 SOAP 消息响应,而是 HTML 页面。这通常发生在您访问受防火墙保护的服务时。这意味着您在计算机上浏览时可能能够看到该服务,但请记住 Salesforce 在您的防火墙之外,因此 Salesforce 与您的服务的任何通信都将被阻止。
有几种方法可以解决这个问题,但 Salesforce 的这个 wiki 主题最好地涵盖了这些选项: http: //www.salesforce.com/us/developer/docs/api/Content/sforce_api_om_outboundmessaging_security.htm
以上内容特定于出站消息,但本质上技术问题是相同的。
根据一些互联网研究添加我自己的最佳答案:
您可以使用像 Runscope 这样的外部工具作为 Web 服务代理来自动转发请求并传递响应并查看 XML SOAP 消息。这不是 SFDC 上的原生解决方案,但它确实可以完成这项工作。
问题是 Force.com 试图解析实际上只是 HTML 的 SOAP 响应。这有时会发生在服务器端发生错误并且响应旨在让浏览器显示,而不是通过格式正确的 SOAP 响应发回异常报告时。
如果他们无法弄清楚为什么他们没有发回可消费的 SOAP 响应,那么您可以尝试使用其他工具(Force.com 之外)从您的浏览器进行相同的 Web 服务调用,然后查看 HTML 实际显示的内容返回。