You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Harish Dewan <ha...@gmail.com> on 2017/03/17 10:47:43 UTC

ScriptException does not prints actual file name

Hi All,
I am trying to run a groovy script from my Java code using JSR223 and I am
using 'groovy-all-2.4.9.jar' .
In case of any exception occurring, it gives a generic name as
Script<unique number>.groovy , where as the script file name was
differently given.

I checked for possible solutions, like I need to set the script file name
in the context. but the current code for eval does not gets the script file
name from context. It creates a unique file name through
'generateScriptName'.

Is this a bug or do I need to deal with it differently ?
Please guide.

Thanks
Harish

Re: ScriptException does not prints actual file name

Posted by Jochen Theodorou <bl...@gmx.org>.
On 19.03.2017 17:29, Harish Dewan wrote:
> Hi Edmond,
> thanks for your reply.
> the unique number which i was talking about is not the line number.
> for example: below is an script exception thrown in case of syntax error.
> I had introduced text 'abcd' in my hello.groovy script.
> in case of exception it says below message
>
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: abcd for class: Script3

in general the name of a script depends on how it is "loaded". These 
automatic names are normally for scripts without file in which the 
script is given in as String, Reader, InputStream or something like that.

> I was expecting error message of type
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: abcd for class: hello.groovy
> I am setting the context as follows
>
> ScriptEngine engine = new ScriptEngineManager(loader)
> .getEngineByExtension(extension);
> ScriptContext context = engine.getContext();
> context.setAttribute(ScriptEngine.FILENAME, "hello.groovy",
> ScriptContext.ENGINE_SCOPE);
>
> Reader r = new FileReader("<path to hello.groovy file>");
> try
> {
> engine.eval(r,context);
> }
> catch (ScriptException e)
> {
> }

I guess that means ScriptEngine.FILENAME is ignored.

bye Jochen

Re: ScriptException does not prints actual file name

Posted by Harish Dewan <ha...@gmail.com>.
Thanks Edmond and Jochen for your reply.

I think the solution which Edmond is suggesting will be a hack not a proper
solution. Can someone from the dev mailing list answer a possible solution
for this problem.

Thanks
Harish

On Mon, Mar 20, 2017 at 5:26 AM, Edmond Kemokai <ek...@gmail.com> wrote:

> Hi Harish,
>
> You are right, the script name is just a somewhat random identifier. In
> that case if you really must know the source file that caused the issue and
> you are executing the groovy code, why don't you capture the resulting
> exception and perhaps replace the Script<magic number>.groovy with the name
> of the file? A simple replace regex can accomplish this.
>
> You actually just gave me an idea for improving the error reporting in
> HiveMind logs :)
>
> Regards
> Edmond
>
>
> On Sun, Mar 19, 2017 at 12:29 PM, Harish Dewan <ha...@gmail.com>
> wrote:
>
>> Hi Edmond,
>> thanks for your reply.
>> the unique number which i was talking about is not the line number.
>> for example: below is an script exception thrown in case of syntax error.
>> I had introduced text 'abcd' in my hello.groovy script.
>> in case of exception it says below message
>>
>> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
>> such property: abcd for class: Script3
>>
>> again if i re run the same code, it just increments the Script<unique
>> number> i.e Script4, Script5 and so on.
>>
>> I was expecting error message of type
>> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
>> such property: abcd for class: hello.groovy
>>
>> I am setting the context as follows
>>
>> ScriptEngine engine = new ScriptEngineManager(loader)
>> .getEngineByExtension(extension);
>> ScriptContext context = engine.getContext();
>> context.setAttribute(ScriptEngine.FILENAME, "hello.groovy",
>> ScriptContext.ENGINE_SCOPE);
>>
>> Reader r = new FileReader("<path to hello.groovy file>");
>> try
>> {
>> engine.eval(r,context);
>> }
>> catch (ScriptException e)
>> {
>> }
>>
>> I did tried looking into source code and in class
>> 'GroovyScriptEngineImpl.java' in function getScriptClass,
>> while it is trying to parse class
>>  clazz = loader.parseClass(script, generateScriptName());
>>
>>  generate script name always increments the counter, there is no
>> reference of getting name from context.
>>   // generate a unique name for top-level Script classes
>>     private synchronized String generateScriptName() {
>>         return "Script" + (++counter) + ".groovy";
>>     }
>> Kindly guide.
>>
>> Thanks
>> Harish
>>
>> On Fri, Mar 17, 2017 at 4:48 PM, Edmond Kemokai <ek...@gmail.com>
>> wrote:
>>
>>> Hi Harish,
>>>
>>> The <unique number> should be the line number where the problem is. How
>>> are you setting context that doesn't show file name? The code you're
>>> running that has the error can't possibly extract something from the
>>> context since there is an error (I am guessing syntax error?).
>>>
>>> I am the developer of HiveMind, it is a JSR223 based web app platform
>>> for Groovy and other JVM languages. You can access:
>>>
>>> url: http://demo.crudzilla.com:7000/
>>> login: developer/developer
>>>
>>> I have created a test file in: /com/crudzilla/cloudTest/web/d
>>> ewan/test.ste
>>>
>>> You can test the code by right clicking on the test.ste file and
>>> selecting "Open In Browser".
>>>
>>> Put your code in there and save, I can review it for you.
>>>
>>>
>>> -Edmond
>>>
>>>
>>> On Fri, Mar 17, 2017 at 6:47 AM, Harish Dewan <ha...@gmail.com>
>>> wrote:
>>>
>>>> Hi All,
>>>> I am trying to run a groovy script from my Java code using JSR223 and I
>>>> am using 'groovy-all-2.4.9.jar' .
>>>> In case of any exception occurring, it gives a generic name as
>>>> Script<unique number>.groovy , where as the script file name was
>>>> differently given.
>>>>
>>>> I checked for possible solutions, like I need to set the script file
>>>> name in the context. but the current code for eval does not gets the script
>>>> file name from context. It creates a unique file name through
>>>> 'generateScriptName'.
>>>>
>>>> Is this a bug or do I need to deal with it differently ?
>>>> Please guide.
>>>>
>>>> Thanks
>>>> Harish
>>>>
>>>>
>>>
>>>
>>>
>>
>
>

Re: ScriptException does not prints actual file name

Posted by Harish Dewan <ha...@gmail.com>.
Thanks Edmond and Jochen for your reply.

I think the solution which Edmond is suggesting will be a hack not a proper
solution. Can someone from the dev mailing list answer a possible solution
for this problem.

Thanks
Harish

On Mon, Mar 20, 2017 at 5:26 AM, Edmond Kemokai <ek...@gmail.com> wrote:

> Hi Harish,
>
> You are right, the script name is just a somewhat random identifier. In
> that case if you really must know the source file that caused the issue and
> you are executing the groovy code, why don't you capture the resulting
> exception and perhaps replace the Script<magic number>.groovy with the name
> of the file? A simple replace regex can accomplish this.
>
> You actually just gave me an idea for improving the error reporting in
> HiveMind logs :)
>
> Regards
> Edmond
>
>
> On Sun, Mar 19, 2017 at 12:29 PM, Harish Dewan <ha...@gmail.com>
> wrote:
>
>> Hi Edmond,
>> thanks for your reply.
>> the unique number which i was talking about is not the line number.
>> for example: below is an script exception thrown in case of syntax error.
>> I had introduced text 'abcd' in my hello.groovy script.
>> in case of exception it says below message
>>
>> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
>> such property: abcd for class: Script3
>>
>> again if i re run the same code, it just increments the Script<unique
>> number> i.e Script4, Script5 and so on.
>>
>> I was expecting error message of type
>> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
>> such property: abcd for class: hello.groovy
>>
>> I am setting the context as follows
>>
>> ScriptEngine engine = new ScriptEngineManager(loader)
>> .getEngineByExtension(extension);
>> ScriptContext context = engine.getContext();
>> context.setAttribute(ScriptEngine.FILENAME, "hello.groovy",
>> ScriptContext.ENGINE_SCOPE);
>>
>> Reader r = new FileReader("<path to hello.groovy file>");
>> try
>> {
>> engine.eval(r,context);
>> }
>> catch (ScriptException e)
>> {
>> }
>>
>> I did tried looking into source code and in class
>> 'GroovyScriptEngineImpl.java' in function getScriptClass,
>> while it is trying to parse class
>>  clazz = loader.parseClass(script, generateScriptName());
>>
>>  generate script name always increments the counter, there is no
>> reference of getting name from context.
>>   // generate a unique name for top-level Script classes
>>     private synchronized String generateScriptName() {
>>         return "Script" + (++counter) + ".groovy";
>>     }
>> Kindly guide.
>>
>> Thanks
>> Harish
>>
>> On Fri, Mar 17, 2017 at 4:48 PM, Edmond Kemokai <ek...@gmail.com>
>> wrote:
>>
>>> Hi Harish,
>>>
>>> The <unique number> should be the line number where the problem is. How
>>> are you setting context that doesn't show file name? The code you're
>>> running that has the error can't possibly extract something from the
>>> context since there is an error (I am guessing syntax error?).
>>>
>>> I am the developer of HiveMind, it is a JSR223 based web app platform
>>> for Groovy and other JVM languages. You can access:
>>>
>>> url: http://demo.crudzilla.com:7000/
>>> login: developer/developer
>>>
>>> I have created a test file in: /com/crudzilla/cloudTest/web/d
>>> ewan/test.ste
>>>
>>> You can test the code by right clicking on the test.ste file and
>>> selecting "Open In Browser".
>>>
>>> Put your code in there and save, I can review it for you.
>>>
>>>
>>> -Edmond
>>>
>>>
>>> On Fri, Mar 17, 2017 at 6:47 AM, Harish Dewan <ha...@gmail.com>
>>> wrote:
>>>
>>>> Hi All,
>>>> I am trying to run a groovy script from my Java code using JSR223 and I
>>>> am using 'groovy-all-2.4.9.jar' .
>>>> In case of any exception occurring, it gives a generic name as
>>>> Script<unique number>.groovy , where as the script file name was
>>>> differently given.
>>>>
>>>> I checked for possible solutions, like I need to set the script file
>>>> name in the context. but the current code for eval does not gets the script
>>>> file name from context. It creates a unique file name through
>>>> 'generateScriptName'.
>>>>
>>>> Is this a bug or do I need to deal with it differently ?
>>>> Please guide.
>>>>
>>>> Thanks
>>>> Harish
>>>>
>>>>
>>>
>>>
>>>
>>
>
>

Re: ScriptException does not prints actual file name

Posted by Edmond Kemokai <ek...@gmail.com>.
Hi Harish,

You are right, the script name is just a somewhat random identifier. In
that case if you really must know the source file that caused the issue and
you are executing the groovy code, why don't you capture the resulting
exception and perhaps replace the Script<magic number>.groovy with the name
of the file? A simple replace regex can accomplish this.

You actually just gave me an idea for improving the error reporting in
HiveMind logs :)

Regards
Edmond

On Sun, Mar 19, 2017 at 12:29 PM, Harish Dewan <ha...@gmail.com>
wrote:

> Hi Edmond,
> thanks for your reply.
> the unique number which i was talking about is not the line number.
> for example: below is an script exception thrown in case of syntax error.
> I had introduced text 'abcd' in my hello.groovy script.
> in case of exception it says below message
>
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: abcd for class: Script3
>
> again if i re run the same code, it just increments the Script<unique
> number> i.e Script4, Script5 and so on.
>
> I was expecting error message of type
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: abcd for class: hello.groovy
>
> I am setting the context as follows
>
> ScriptEngine engine = new ScriptEngineManager(loader)
> .getEngineByExtension(extension);
> ScriptContext context = engine.getContext();
> context.setAttribute(ScriptEngine.FILENAME, "hello.groovy",
> ScriptContext.ENGINE_SCOPE);
>
> Reader r = new FileReader("<path to hello.groovy file>");
> try
> {
> engine.eval(r,context);
> }
> catch (ScriptException e)
> {
> }
>
> I did tried looking into source code and in class
> 'GroovyScriptEngineImpl.java' in function getScriptClass,
> while it is trying to parse class
>  clazz = loader.parseClass(script, generateScriptName());
>
>  generate script name always increments the counter, there is no reference
> of getting name from context.
>   // generate a unique name for top-level Script classes
>     private synchronized String generateScriptName() {
>         return "Script" + (++counter) + ".groovy";
>     }
> Kindly guide.
>
> Thanks
> Harish
>
> On Fri, Mar 17, 2017 at 4:48 PM, Edmond Kemokai <ek...@gmail.com>
> wrote:
>
>> Hi Harish,
>>
>> The <unique number> should be the line number where the problem is. How
>> are you setting context that doesn't show file name? The code you're
>> running that has the error can't possibly extract something from the
>> context since there is an error (I am guessing syntax error?).
>>
>> I am the developer of HiveMind, it is a JSR223 based web app platform for
>> Groovy and other JVM languages. You can access:
>>
>> url: http://demo.crudzilla.com:7000/
>> login: developer/developer
>>
>> I have created a test file in: /com/crudzilla/cloudTest/web/d
>> ewan/test.ste
>>
>> You can test the code by right clicking on the test.ste file and
>> selecting "Open In Browser".
>>
>> Put your code in there and save, I can review it for you.
>>
>>
>> -Edmond
>>
>>
>> On Fri, Mar 17, 2017 at 6:47 AM, Harish Dewan <ha...@gmail.com>
>> wrote:
>>
>>> Hi All,
>>> I am trying to run a groovy script from my Java code using JSR223 and I
>>> am using 'groovy-all-2.4.9.jar' .
>>> In case of any exception occurring, it gives a generic name as
>>> Script<unique number>.groovy , where as the script file name was
>>> differently given.
>>>
>>> I checked for possible solutions, like I need to set the script file
>>> name in the context. but the current code for eval does not gets the script
>>> file name from context. It creates a unique file name through
>>> 'generateScriptName'.
>>>
>>> Is this a bug or do I need to deal with it differently ?
>>> Please guide.
>>>
>>> Thanks
>>> Harish
>>>
>>>
>>
>>
>>
>

Re: ScriptException does not prints actual file name

Posted by Harish Dewan <ha...@gmail.com>.
Hi Edmond,
thanks for your reply.
the unique number which i was talking about is not the line number.
for example: below is an script exception thrown in case of syntax error.
I had introduced text 'abcd' in my hello.groovy script.
in case of exception it says below message

javax.script.ScriptException: groovy.lang.MissingPropertyException: No such
property: abcd for class: Script3

again if i re run the same code, it just increments the Script<unique
number> i.e Script4, Script5 and so on.

I was expecting error message of type
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such
property: abcd for class: hello.groovy

I am setting the context as follows

ScriptEngine engine = new ScriptEngineManager(loader)
.getEngineByExtension(extension);
ScriptContext context = engine.getContext();
context.setAttribute(ScriptEngine.FILENAME, "hello.groovy",
ScriptContext.ENGINE_SCOPE);

Reader r = new FileReader("<path to hello.groovy file>");
try
{
engine.eval(r,context);
}
catch (ScriptException e)
{
}

I did tried looking into source code and in class
'GroovyScriptEngineImpl.java' in function getScriptClass,
while it is trying to parse class
 clazz = loader.parseClass(script, generateScriptName());

 generate script name always increments the counter, there is no reference
of getting name from context.
  // generate a unique name for top-level Script classes
    private synchronized String generateScriptName() {
        return "Script" + (++counter) + ".groovy";
    }
Kindly guide.

Thanks
Harish

On Fri, Mar 17, 2017 at 4:48 PM, Edmond Kemokai <ek...@gmail.com> wrote:

> Hi Harish,
>
> The <unique number> should be the line number where the problem is. How
> are you setting context that doesn't show file name? The code you're
> running that has the error can't possibly extract something from the
> context since there is an error (I am guessing syntax error?).
>
> I am the developer of HiveMind, it is a JSR223 based web app platform for
> Groovy and other JVM languages. You can access:
>
> url: http://demo.crudzilla.com:7000/
> login: developer/developer
>
> I have created a test file in: /com/crudzilla/cloudTest/web/dewan/test.ste
>
> You can test the code by right clicking on the test.ste file and selecting
> "Open In Browser".
>
> Put your code in there and save, I can review it for you.
>
>
> -Edmond
>
>
> On Fri, Mar 17, 2017 at 6:47 AM, Harish Dewan <ha...@gmail.com>
> wrote:
>
>> Hi All,
>> I am trying to run a groovy script from my Java code using JSR223 and I
>> am using 'groovy-all-2.4.9.jar' .
>> In case of any exception occurring, it gives a generic name as
>> Script<unique number>.groovy , where as the script file name was
>> differently given.
>>
>> I checked for possible solutions, like I need to set the script file name
>> in the context. but the current code for eval does not gets the script file
>> name from context. It creates a unique file name through
>> 'generateScriptName'.
>>
>> Is this a bug or do I need to deal with it differently ?
>> Please guide.
>>
>> Thanks
>> Harish
>>
>>
>
>
>

Re: ScriptException does not prints actual file name

Posted by Edmond Kemokai <ek...@gmail.com>.
Hi Harish,

The <unique number> should be the line number where the problem is. How are
you setting context that doesn't show file name? The code you're running
that has the error can't possibly extract something from the context since
there is an error (I am guessing syntax error?).

I am the developer of HiveMind, it is a JSR223 based web app platform for
Groovy and other JVM languages. You can access:

url: http://demo.crudzilla.com:7000/
login: developer/developer

I have created a test file in: /com/crudzilla/cloudTest/web/dewan/test.ste

You can test the code by right clicking on the test.ste file and selecting
"Open In Browser".

Put your code in there and save, I can review it for you.


-Edmond


On Fri, Mar 17, 2017 at 6:47 AM, Harish Dewan <ha...@gmail.com>
wrote:

> Hi All,
> I am trying to run a groovy script from my Java code using JSR223 and I am
> using 'groovy-all-2.4.9.jar' .
> In case of any exception occurring, it gives a generic name as
> Script<unique number>.groovy , where as the script file name was
> differently given.
>
> I checked for possible solutions, like I need to set the script file name
> in the context. but the current code for eval does not gets the script file
> name from context. It creates a unique file name through
> 'generateScriptName'.
>
> Is this a bug or do I need to deal with it differently ?
> Please guide.
>
> Thanks
> Harish
>
>