2012-05-03 105 views
0

我正在嘗試構建Web服務。這是我的一個簡單的Web服務的代碼,它返回一個字符串。 在開始時,我從ben nadel 插入了一些代碼,它會自動刷新存根文件,否則在傳遞參數時會出錯。正在使用Coldfusion Web服務

<cfcomponent 
    displayname="BaseWebService" 
    output = "false" 
    hint="This handles core web service features"> 


    <cffunction 
     name="Init" 
     access="public" 
     returntype="any" 
     output="false" 
     hint="Returns an initialized web service instance."> 

     <cfreturn THIS /> 
    </cffunction> 

    <cffunction 
     name="RebuildStubFile" 
     access="remote" 
     returntype="void" 
     output="false" 
     hint="Rebuilds the WSDL file at the given url."> 

     <cfargument name="Password" type="string" required="true" default="" /> 

     <cfif NOT Compare(ARGUMENTS.Password, "sweetlegs!")> 
      <cfset CreateObject("java", "coldfusion.server.ServiceFactory" 
        ).XmlRpcService.RefreshWebService(
         GetPageContext().GetRequest().GetRequestUrl().Append("?wsdl").ToString()) /> 
     </cfif> 

     <cfreturn /> 
    </cffunction> 

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

     <cfargument name="anyOutput" type="string" default="this and that" /> 
     <cfargument name="xtype" type="string" required="yes" default="1" />   

      <cfif Compare(xtype, "1") EQ 0> 
       <cfset anyVar = "one" /> 
      <cfelse> 
       <cfset anyVar = "two" /> 

      </cfif> 
     <cfreturn anyVar>  
    </cffunction> 
</cfcomponent> 

這裏我試圖調用webservice。

<cfinvoke 
    webservice="https://[...]/Components/Webservice.cfc?wsdl" 
    method="RebuildStubFile"> 

    <cfinvokeargument 
     name="Password" 
     value="sweetlegs!" /> 
</cfinvoke> 
<cfinvoke 
    webservice="[...]/Components/Webservice.cfc?wsdl" 
    method="easyService" 
    returnVariable="anyVar" > 

    <cfinvokeargument 
     name="xtype" 
     value="2" 
     omit="true"> 
</cfinvoke> 

<cfdump var="#anyVar#"> 

我的web服務組件的第一種方法可以被調用,但第二個始終返回此錯誤消息:通過添加

coldfusion.xml.rpc.ServiceProxy$ServiceMethodNotFoundException: Web service operation  easyService with parameters {xtype={2}} cannot be found. 
    at coldfusion.xml.rpc.ServiceProxy.invoke(ServiceProxy.java:149) 
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2301) 
    at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:454) 

如果我在web服務的URL類型,

?方法= easyService &的xtype = 2

它返回正確的值。但這就像使用GET方法傳遞值。

我一直在尋找小時,不知道問題發生在哪裏。

回答

3

我想在使用WebService調用時,您需要指定所有參數,並在適當的(不在xtype上)使用omit =「true」。

<cfinvoke 
    webservice="[...]/Components/Webservice.cfc?wsdl" 
    method="easyService" 
    returnVariable="anyVar" > 

    <cfinvokeargument 
     name="anyOutput" 
     value="" 
     omit="true"> 

    <cfinvokeargument 
     name="xtype" 
     value="2"> 
</cfinvoke> 
+0

非常感謝。它現在就起作用了。 –