coldfusion使用SOAP发布webservice

时间:2012-05-03 13:43:40

标签: soap coldfusion request response publishing

我正在尝试创建一个可以使用SOAP的Web服务。我正在使用返回任何值的普通web服务进行练习,但我知道我想检查SOAP:BODY中需要哪些元素并返回响应。我找到了方法

  

GetSoapRequest()

  

AddSoapResponse()

来自adobe的liveoc,但不明白如何使用它们。 我在w3school.com

上看到了请求和回复的详细说明

我试图用标签“cfsavecontent”解决问题

<cffunction
        name="soap"
        access="remote"
        returntype="any"
        output="false">

        <cfsavecontent variable="soapMessage">
            <?xml version="1.0">
            <soap:Envelope
                xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
                soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

                <soap:Header>

                </soap:Header>

                <soap:Body>
                     <m:GetPriveResponse xmlns:m="namespace">
                         <m:Price>1.90</m:Price>
                    </m:GetPriceResponse>
                </soap:Body>        
             </soap:Envelope>
         </cfsavecontent>

但只有当cffunction具有returntype =“any”时它才有效。 “xml”类型出错。

thx for helf

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

我刚刚安装了soapUI eclipse addon并调用了包含复杂类型参数的WSDL。在使用插件测试我web service的方法之后,我得到了我一直在搜索的SOAP消息。也许它会对任何人有所帮助,我只是在寻找这个解决方案的时间。

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"           
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:com="http://components.conner.somebody">
    <soapenv:Header/>
    <soapenv:Body>
          <com:echoAddress soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
          <input xsi:type="com:Address">
              <City xsi:type="xsd:string">?</City>
              <Country xsi:type="xsd:string">?</Country>
              <State xsi:type="xsd:string">?</State>
              <Street xsi:type="xsd:string">?</Street>
          </input>
          </com:echoAddress>
    </soapenv:Body>
</soapenv:Envelope>

以下是将被称为

的coldfusion组件的方法
<cffunction
    name="echoAddress"
    returnType="address"
    output="false"
    access="remote">

    <cfargument
        name="input"
        type="address">

    <cfreturn #arguments.input#>
</cffunction>