2013-04-16 164 views
1

我需要從我的coldfusion應用程序調用通過HTTP web服務的肥皂。這涉及到用戶提交表單(有很多字段),然後代碼應該將所有這些信息傳遞給Web服務並獲得一些響應。所以一直在爲此製作一個原型。Coldfusion,使用肥皂動態肥皂身體調用Web服務xml

我一直在通過這個論壇,並看到了很多代碼片段,但不知何故,所有似乎都在xml部分傳遞硬編碼值,但我需要傳遞一個變量的值。當我嘗試傳遞變量等,代碼不會將它們視爲變量,而是作爲文本值。

我的web服務調用的代碼是:

<cfsavecontent variable="soap"><?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope 
     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://localhost:8500/Credit Card Soap Web Service"><!---1 this is the cfc location---> 

<!---Optional 
    <soapenv:Header> 
    <setInit>1</setInit> 
    <!--- 2 header param ---> 
    </soapenv:Header>---> 
    <soapenv:Body> 
     <authorize soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > 
     <!---3 cfc method name ---> 
      <name>#elemName.XmlText#</name> 
      <address>1010 Pine St</address> 
      <zip>110001</zip> 
      <state>MO</state> 
      <country>USA</country> 
      <cardtype>Visa</cardtype> 
      <cardnumber>123123123</cardnumber> 
      <expiry>10-12-2020</expiry> 
      <amount>50000</amount> 
     </authorize> 
     </soapenv:Body> 
</soapenv:Envelope> 
</cfsavecontent> 


<cfhttp url="http://localhost:8500/Credit Card Soap Web Service/Credit Card Soap Web Service authorization.cfc" method="post"> 
    <cfhttpparam type="header" name="content-type" value="text/xml"> 
    <cfhttpparam type="header" name="SOAPAction" value=""> 
    <cfhttpparam type="header" name="content-length" value="#len(soap)#"> 
    <cfhttpparam type="header" name="charset" value="utf-8"> 
    <cfhttpparam type="xml" name="message" value="#trim(soap)#"> 
</cfhttp> 


<cfdump var="#xmlparse(cfhttp.FileContent)#"> 

此時的web服務簡單地返回傳遞給它.Still試圖一號鐵桿這個問題的值。

注意代碼:

> <name>#elemName.Text#</name> 

> <address>1010 Pine St</address> 

兩個行被看作是相同的方式。由於實際值。 XmlText被設置爲上面的值,這不會從變量中選擇值。

<cfdump var="#xmlparse(cfhttp.FileContent)#"> 

此打印:

item XmlText 
key XmlText NAME 
XmlAttributes struct 
xmlns:soapenc http://schemas.xmlsoap.org/soap/encoding/ 
xsi:type soapenc:string 


**value XmlText #elemName.XmlText#** 
XmlAttributes struct 
xmlns:soapenc http://schemas.xmlsoap.org/soap/encoding/ 
xsi:type soapenc:string 

請讓我知道我在做什麼錯在這裏。我是新來的CF,並且仍在改進我的基礎知識。

而且我怎樣才能改變我的編碼風格,以「一號文件」

請讓我知道如果你需要從我進一步的信息。

在此先感謝

回答

1

爲了傳遞變量的值,所有你需要做的是包裝中包含在<cfsavecontent>標籤內的<cfoutput>標籤ColdFusion的變量。就像這樣:

<name><cfoutput>#elemName.XmlText#</cfoutput></name> 

如果你有幾個ColdFusion的變量,你也可以將周圍的代碼包含的周圍,而不是每個變量。其中,塊<cfoutput>標籤。就像這樣:

<soapenv:Body> 
    <cfoutput> 
     <authorize soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > 
      <!---3 cfc method name ---> 
      <name>#elemName.XmlText#</name> 
      <address>#elemAddress.XmlText#</address> 
      <zip>#elemZip.XmlText#</zip> 
      <state>#elemState.XmlText#</state> 
      <country>#elemCountry.XmlText#</country> 
      <cardtype>#elemCardType.XmlText#</cardtype> 
      <cardnumber>#elemCardNumber.XmlText#</cardnumber> 
      <expiry>#elemCardDate.XmlText#</expiry> 
      <amount>#elemAmount.XmlText#</amount> 
     </authorize> 
    </cfoutput> 
</soapenv:Body> 

在你<cfhttpparam>標籤,你也應該符合邏輯的判斷基礎上,內容長度修剪長度您soap變量。因爲這是你傳遞的信息。將trim函數添加到內容長度標頭。像這樣:

<cfhttpparam type="header" name="content-length" value="#len(trim(soap))#"> 
+0

嗨,這工作像魔術。謝謝你快速的回覆。我還有一個查詢:我們將訪問的實際web服務具有wsdlsoap:綁定樣式是「document」類型。 我是否需要對上述代碼進行任何更改以適應此問題? – user2286338

+0

我不認爲文檔的綁定類型對於您調用服務的方式很重要。你是否收到錯誤或者是不能正常工作? –

+0

好!大。我還沒有開始使用實際的web服務。到目前爲止,只是在我的調用框架代碼上工作。 非常感謝你的幫助。 這聽起來有點愚蠢,但仍然想問:上面的代碼看起來確定調用soap-HTTP webservice嗎? – user2286338