groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erick Nelson <eric...@gmail.com>
Subject Re: No Such Property - When executing script from Java.
Date Wed, 17 Jun 2015 06:36:08 GMT
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 <orubel@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
> orubel@gmail.com
>
> On Tue, Jun 16, 2015 at 6:57 PM, Paul Henry <paul.henry@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.henry@futrix.com | www.futrix.com | LinkedIn
>> <http://www.linkedin.com/company/futrix-ltd>
>>
>>
>

Mime
View raw message