1

我需要从我的coldfusion 应用程序中通过HTTP 网络服务调用soap。这涉及到用户提交一个表单(有很多字段),然后代码应该将所有这些信息传递给 web 服务并获得一些响应。所以一直在为此制作原型。

我一直在浏览这个论坛,并且已经看到了很多代码片段,但不知何故,似乎都在 xml 部分中传递了硬编码值,但我需要从变量传递值。当我尝试传递变量等时,代码不会将它们视为变量,而是将其视为文本值。

我的网络服务调用代码是:

<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 服务只是简单地返回传递给它的值。仍然试图先解决这个问题。

注意代码:

>  <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 新手,但我的基础知识仍在改进。

另外我怎样才能将我的编码样式更改为“文档”

如果您需要我提供更多信息,请告诉我。

提前致谢

4

1 回答 1

1

为了传递变量的值,您需要做的就是用标签包装包含在<cfsavecontent>标签中的 ColdFusion 变量<cfoutput>。像这样:

 <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))#">
于 2013-04-16T13:02:02.660 回答