it-swarm.com.de

Keine Signatur der Methode: gilt für Argumenttypen in Groovy

Ich bin ziemlich neu bei Groovy und bekomme beim Ausführen der untenstehenden Methode einen Fehler. Ich versuche, den XML-Dateinamen und die Map zu übergeben

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

Consumer.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()
    }

Error:

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)

Nach dem Durchsuchen des Problems stellte sich heraus, dass es ein häufiges Problem war. Konnte es nicht herausfinden. Weil alle Lösungen subjektiv sind.

Nur neugierig, wo ich falsch mache

Vielen Dank

6
SMPH

currConvert ist eine Instanzmethode, die jedoch wie eine statische Methode aufgerufen wird.

8

Ich hatte ein ähnliches Problem wie dieses:

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

Ich habe die gleiche Ausnahme bei printMessage (obj) ... bekommen.

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