我试图从coldfusion服务器进行xml-rpc调用。我发现这个xml-rpc cfc(谢谢,Brad Wood!)格式化了cfhttp调用的xml,但我正在努力解释如何传递除调用名称之外的任何参数。
这是使用perl的api文档
这是我的冷冻代码
<cfobject component="xmlrpc" name="c">
<cfset arr = arraynew(1)>
<cfset arrayappend(arr,"service.show")>
<cfset arrayappend(arr,myVIP)>
<cfset arrayappend(arr,myIP)>
<cfset arrayappend(arr,myPort)>
<cfset myxml = c.CFML2XMLRPC(arr,"call")>
<cfhttp url="#apiUrl#" method="POST">
<cfhttpparam name="request_body" value="#myxml#" type="XML">
</cfhttp>
我不断收到的错误消息是:
不能使用字符串( myVIP ... )作为HASH参考,而#34; strict refs&#34;在 在 / home /...
使用
所以我不明白如何翻译我在 {parameter1 =&gt;&#39; value1&#39;,parameter2 =&gt;&#39> perl中看到的符号; value2&#39;} 到我传入CFML2XMLRPC的数组。
答案 0 :(得分:2)
我想通了,现在看起来很明显......你必须使用一个结构来保存参数并将其传递给方法字符串后面的数组。
<cfset arr = arraynew(1)>
<cfset arrayappend(arr,"service.show")>
<cfset paramObj = structnew()>
<cfset paramObj['vip'] = myVIP>
<cfset paramObj['ip'] = myIP>
<cfset paramObj['port'] = myPort>
<cfset paramObj['show'] = "status/state">
<cfset arrayappend(arr,paramObj)>
我发现jquery xml-rpc文档有助于理解如何实际格式化xml。
注意:
的符号<cfset paramObj['ip'] = myIP>
vs
<cfset paramObj.ip = myIP>
很重要,因为后者将导致xmlrpc.cfc中参数名称的全部大写。 (感谢comment by Dave Merrill on this post)