web-dev-qa-db-fra.com

Aucune signature de méthode: n'est applicable pour les types d'argument error dans Groovy

Je suis assez nouveau pour groovy et obtenir l'erreur suivante lorsque j'exécute la méthode ci-dessous. J'essaie de transmettre le nom du fichier XML et la carte

RD.groovy

    Given(~'^input currency "([^"]*)"$') { String baseCurr ->
     fromCurr = baseCurr
}
When(~'^insert end Currency "([^"]*)"$') { String tragetCurr ->
     toCurr = tragetCurr
}


Then(~'^get the expected end currency value "([^"]*)"$') { String result ->

    assert result == currCon(fromCurr, toCurr)


}

private currCon(fromCurr, toCurr)
{

    def binding = ["fromCurr": fromCurr, "toCurr": toCurr]
    response = Consumer.currConvert("request/CurrencyConvert.xml",binding)    --> This is line 119

    assert 200 == response.status
    return response.data.ConversionRateResult.toString()
}

ClassA.groovy

    package abc.api.member

import abc.util.Log
import abc.util.TemplateUtil
import groovyx.net.http.ContentType
import abc.api.RestClient


class ClassA extends ClassB{

    ClassA(RestClient restClient) {
        super(restClient)
    }

def currConvert(String xmlFilename, Map binding) {

        return currencyConvertRequest(TemplateUtil.xmlFromTemplate(xmlFilename, binding))

    }

def currencyConvertRequest(xmlString) {

        def params = [path : 'CurrencyConvertor.asmx',
                headers: globeHeaders(),
                body: xmlString]
        return restClient.post(params)
    }

Consommateur.Groovy

package abc.api.member

import geb.Browser
import org.Apache.http.client.utils.URIBuilder
import abc.api.RestClient
import abc.browser.member.Admin


class Consumer {
    Browser browser
    String token
    String userId

    @Delegate
    private ClassA classA

 Consumer(url) {
        browser = new Browser()
        browser.baseUrl = baseUrl(url)
        restClient = new RestClient(url)

        classA =  new ClassA(restClient)    
    }

private baseUrl(url) {
        URI uri = URI.create(url)
        URIBuilder builder = new URIBuilder()
        URI result =builder.setHost(uri.Host). //
                setPath(uri.path). //
                setPort(uri.port). //
                setScheme(uri.scheme). 
                setUserInfo("Cons", "pbiCons").build()

        return result.toURL().toString()
    }

Erreur:

groovy.lang.MissingMethodException: No signature of method: abc.api.consumer.Consumer.currConvert() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl, Java.util.LinkedHashMap) values: [request/globe/CurrencyConvert.xml, [fromCurr:AUD, ...]]
            at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.Java:55)
            at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.Java:51)
            at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.Java:45)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.Java:108)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.Java:120)
            at RD.currCon(RD.groovy:119)

Après avoir cherché le problème, il s’est avéré qu’il s’agissait d’un problème courant. Impossible de comprendre si. Parce que toutes les solutions sont subjectives.

Juste curieux de savoir où je me trompe

Merci

6
SMPH

currConvert est une méthode d'instance, mais elle est appelée comme s'il s'agissait d'une méthode statique.

8
Peter Niederwieser

J'ai eu un problème similaire à celui-ci:

class Example {
  static void main (String [] args) {
   printMessage(obj)
  }
  def printMessage(obj) {
  }
}

Je recevais la même exception à printMessage (obj). Elle a été corrigée après l'avoir modifiée de la manière suivante:

class Example {
  static void main (String [] args) {
    new Example().printMessage(obj)
   }
   def printMessage(obj) {
   }
 }
1
S'chn T'gai Spock