0

私は、SOAPベースのWSDLを生成する別のインスタンスで動作するSFDC開発者の別のグループからクラスファイルを受け取りました。そのクラスファイルをインポートし、インスタンスでWSDLを生成しました。Webサービスは非常に基本的であり、値のセットを返すだけで(もちろん、XMLで)、それらの値を取得するための引数は必要ありません。

WSDLが機能していることをテストするために、インスタンスからローカルPCにWSDLをダウンロードし、SOAPUIに入れて、値のセットを正常に返しました。

今すぐ問題に-URLを介して消費する

ColdfusionのCFHTTPを使用しているので、2つのCFHTTP呼び出しがあります。最初は、有効なセッションIDを返すインスタンスのログインです。このセッションIDは、以下の2番目の呼び出しで使用されます。

<!--- 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 に答える