You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@groovy.apache.org by Harish Dewan <ha...@gmail.com> on 2017/03/24 11:31:22 UTC

Re: ScriptException does not prints actual file name

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
>>>>
>>>>
>>>
>>>
>>>
>>
>
>