2012-05-03 7 views
0

J'essaye de construire un service Web. Voici mon code pour un service web simple qui renvoie une chaîne. Au début, j'ai inséré du code de ben nadel Il actualise automatiquement le fichier stub car sinon vous obtenez des erreurs lors du passage des paramètres.consommer des services web coldfusion

<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> 

Ici, j'essaye d'appeler le 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#"> 

La première méthode de mon composant de service Web peut être invoquée, mais le second renvoie toujours ce message d'erreur:

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) 

Si je tape dans l'url du webservice, en ajoutant

? method = EasyService & xtype = 2

il renvoie la bonne valeur. mais c'est comme passer des valeurs avec une méthode GET.

J'ai cherché pendant des heures et je ne sais pas où le problème se produit.

Répondre

3

Je pense que lorsque vous utilisez l'appel WebService, vous devez spécifier tous les arguments et utiliser omit = "true" sur le bon (pas sur xtype).

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

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

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

Merci beaucoup. Cela fonctionne maintenant. –

Questions connexes