try this for your groovy script... import groovy.transform.Field
class Action { String actionName void execute () { println "Doing '$actionName'" } } @Field formFilled = new Action(actionName: "Form Filled").&execute @Field mailSent = new Action(actionName: "Mail Sent").&execute void invoke (String action) { "${action}"() } On Tue, Jun 16, 2015 at 7:35 PM, Owen Rubel <oru...@gmail.com> wrote: > The 'Bugger' exception is an internationalized error for people in Great > Britain to let them know they are truly fucked. > > Seriously though, in the script you sent, it doesn't look like you > declared 'formFilled'. > > At a minimum, declare it with def: > > def formFilled = new Action("Form Filled") > > > Owen Rubel > 415-971-0976 > oru...@gmail.com > > On Tue, Jun 16, 2015 at 6:57 PM, Paul Henry <paul.he...@futrix.com> wrote: > >> Hi All, >> >> I am trying to run a groovy script from Java and getting the following >> error >> >> <quote>Exception in thread "main" >> org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack: No >> such property: formFilled for class: Bugger</quote> >> >> My script looks like this. >> >> <quote> >> class Action { >> String actionName >> Action(actionName) { >> this.actionName = actionName; >> } >> void execute() { >> println "Doing $actionName" >> } >> } >> >> formFilled = new Action("Form Filled") >> >> mailSent = new Action("Mail Sent") >> >> def invoke(action) { >> this."$action".execute() >> } >> >> //----- These are runnable when run as a script. >> formFilled.execute() >> invoke("mailSent") >> </quote> >> >> If i execute the script directly then the last two lines execute and >> produce the expected Strings printed to the standard out. >> >> <quote> >> Doing Form Filled >> Doing Mail Sent >> </quote> >> >> I am trying to run it from Java with something like the following. >> >> <quote> >> Class scriptClass = new GroovyClassLoader().parseClass(new >> File(Bugger.groovy)); >> Object scriptInstance = scriptClass.newInstance(); >> scriptClass.getDeclaredMethod("invoke", new Class[] >> {}).invoke(scriptInstance, new Object[] {"formFilled"}); >> </quote> >> >> But I keep getting the No Such property exception. Ive looked around for >> solutions, but either Im missing something so basic its generally >> understood, or i haven't found the right part of the internet. >> >> So Two questions. >> >> 1) why is the property not available / hidden. I don't understand why its >> not available to a method within what I expect is the class. >> >> 2) what change do I have to make to my code snippets to get it to work. >> >> (Note: I've created a simple example of the problem, rather than post my >> actual code. I am using groovy to define a DSL for describing actions. We >> then parse a script in that DSL defining different actions. During >> operation we want to trigger individual actions to execute on certain >> occurrences) >> >> Cheers >> >> -Paul >> >> >> >> Paul Henry >> Senior Technical Developer | >> 79 Boulcott Street, Level 2, Wellington 6011, New Zealand >> <https://maps.google.com/maps?q=79+Boulcott+Street,+Level+2,+Wellington+6011,+New+Zealand> >> >> tel +64 4 499 1327 | mob +64 22 161 8700 >> paul.he...@futrix.com | www.futrix.com | LinkedIn >> <http://www.linkedin.com/company/futrix-ltd> >> >> >