wood burning stoves 2.0*
The moose likes Groovy and the fly likes MissingMethodException when trying to call a method dynamically with a String for the methodName Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Languages » Groovy
Bookmark "MissingMethodException when trying to call a method dynamically with a String for the methodName" Watch "MissingMethodException when trying to call a method dynamically with a String for the methodName" New topic
Author

MissingMethodException when trying to call a method dynamically with a String for the methodName

Mark Spritzler
ranger
Sheriff

Joined: Feb 05, 2001
Posts: 17258
    
    6

So you can use

"$methodName"(params)
or

"$methodName" params

And methodName is a string with the real method name.

This works in Groovy, but not everywhere. I seem to have the most problem with this in a Groovy script as opposed to a Groovy class.


(Command pattern)
So in my script I receive some JSON data (the command) and use one of its properties for the String with the method name. If I could call the method dynamically means I don't need to write a switch statement to check the value of that property to determine which method to call. So instead I name the method the same as a value in the property.

In the following code I pass json of {"action": "listOfCountries"}


In the script I have




As you can see the closure/method has the same name as in the json. When I call it I get the MissingMethodException thrown. But if I replace the call to "$action" to listOfCountries it calls that method fine.

I can't find a solution.

I wonder can I do "$action".asClosure().call(data, socket) or something like that, that was off the top of my head, so the method might not be called call.

Thanks

Mark


Perfect World Programming, LLC - Two Laptop Bag - Tube Organizer
How to Ask Questions the Smart Way FAQ
Mark Spritzler
ranger
Sheriff

Joined: Feb 05, 2001
Posts: 17258
    
    6

Sorry looks like asClosure is just a method in the vertx project I am using and not something that is a part of the Groovy language.

Also, why is the Groovy codehaus website so slow to scroll down a page?

Mark
Mark Spritzler
ranger
Sheriff

Joined: Feb 05, 2001
Posts: 17258
    
    6

I resolved it by changing how I create my closure methods.

I was using

def functionName = {param ->

}

Which caused the error I think because

"$functionName" would be the pointer to the closure, not call the actual closure.

So I changed it to

def function(param) {
}

Mark
 
jQuery in Action, 2nd edition
 
subject: MissingMethodException when trying to call a method dynamically with a String for the methodName