0

我从另一组 SFDC 开发人员那里获得了一个类文件,他们在单独的实例中工作,生成基于 SOAP 的 WSDL。我已经导入了那个类文件并在我们的实例中生成了 WSDL。Web 服务非常基础,它只返回一组值(当然是在 XML 中)并且不需要任何参数来检索这些值。

只是为了测试 WSDL 是否正常工作,我已将 WSDL 从我们的实例下载到我的本地 PC 并将其放入 SOAPUI 并成功返回了一组值。

现在进入问题 - 通过 URL 消费

我使用 Coldfusion 的 CFHTTP,所以我有两个 CFHTTP 调用,第一个是我们实例的登录,它返回一个有效的会话 ID。此会话 ID 用于我的第二次通话,如下所示:

<!--- token from from first cfhttp --->
<cfset variables.access_token_node = xmlSearch(XMLContent, "//*[name()='sessionId']") />
<cfset variables.access_token = variables.access_token_node[1].xmlText>

<cfset variables.wsdl_url2 = "https://cs12.salesforce.com/services/wsdl/class/WS_FAKE_WSDL">

<cfset packet = CreateObject("java", "java.lang.StringBuffer") />
<cfset packet.append('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://soap.sforce.com/schemas/class/WS_FAKE_WSDL">') />
<cfset packet.append('<soapenv:Header>') />
<cfset packet.append('<ws:SessionHeader>') />
<cfset packet.append('<ws:sessionId>#variables.access_token#</ws:sessionId>') />
<cfset packet.append('</ws:SessionHeader>') />
<cfset packet.append('</soapenv:Header>') />
<cfset packet.append('<soapenv:Body>') />
<cfset packet.append('<ws:DescribesObjectFields/>') />
<cfset packet.append('</soapenv:Body>') />
<cfset packet.append('</soapenv:Envelope>') />

<cfhttp method="post" url="#variables.wsdl_url2#" result="findResponse2">
 <cfhttpparam type="HEADER" name="Accept" value="application/soap+xml, application/xml, multipart/related, text/*">
 <cfhttpparam type="HEADER" name="ACCEPT-ENCODING" value="application/soap+xml">
 <cfhttpparam type="HEADER" name="CONNECTION" value="Keep-Alive">
 <cfhttpparam type="HEADER" name="SOAPAction" value="dummy">
 <cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
 <cfhttpparam type="HEADER" name="Must-Understand" value="1">
 <cfhttpparam type="Header" name="Content-Length" value="#len(trim(packet.ToString()))#">
 <cfhttpparam type="body" value="#packet.ToString()#" encoded="yes">
</cfhttp>

以下是我从 WSDL 收到的内容。该代码只是将我带回登录屏幕。使用会话 ID,我会假设我不需要重新登录,对吗?

在此处输入图像描述

感谢所有建议。

4

1 回答 1

3

您似乎将 APi 调用发送到 WSDL 文件的 URL,这不是正确的 URL,您应该将其发送到 WSDL 文件中详细说明的服务地址,请参阅底部soap:address元素中的元素serviceWSDL。

于 2012-04-23T18:45:30.047 回答