File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
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 EJB 3 in Action this week in the EJB and other Java EE Technologies 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: 17249
    
    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: 17249
    
    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: 17249
    
    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
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: MissingMethodException when trying to call a method dynamically with a String for the methodName
 
Similar Threads
Posting one selected option value in two forms
Grails in action: MissingMethodException when creating one to one Integration test
MissingMethodException Error
iterating with a scriptlet, can't get the values into js arr
unable to get response from payment website