Getting file names on stack traces.

Jim Laskey (Oracle) james.laskey at oracle.com
Tue Apr 22 12:33:14 UTC 2014


Benjamin's recommendation is also ours.  We're rather limited to how much we can extend the the javax.script APIs.  I would, however, recommend assigning the script and name to globals such as $SCRIPT and $SCRIPT_NAME using engine.put. Then engine.eval("load('{script: $SCRIPT, name: $SCRIPT_NAME}')").  That way you can avoid having to escape your strings.

Cheers,

-- Jim


On Apr 22, 2014, at 4:47 AM, Benjamin Sieffert <benjamin.sieffert at metrigo.de> wrote:

> Hi Greg,
> 
> I've also tried to do this, but (without looking into it very extensively)
> didn't find a way other than to build a second string that wraps the first
> one like this:
> 
> String scriptWithFileName = "load("
>    // will be shown as scriptname in stacktraces
>    + "{ name: \"" + name + '"' + ','
>    // the actual script
>    + "script:" + escapeJavaScript(script) + '"'
>    + '}'
>    + ')';
> 
> It's working as intended and doesn't seem to have any unwanted
> side-effects, but of course it would be nice to be able to do this more
> cleanly from Java. I guess there's the possibility of calling the
> load-extension somewhere, but it doesn't seem to be public (Java) API.
> 
> Hope this helps
> 
> 
> 2014-04-21 22:02 GMT+02:00 Greg Brail <greg at apigee.com>:
> 
>> Let's say that I have some JS code like this:
>> 
>> (function(foo) {
>>  throw new Error('Sorry, ' + foo);
>> })
>> 
>> and I execute it by reading it into a String variable, then executing it
>> using ScriptEngine.eval(string), and then I call the function later, either
>> from Java directly or from some other JS code.
>> 
>> Right now, in Nashorn, I see that the stack trace of my exception will
>> include the entry:
>> 
>> "<eval>:2"
>> 
>> to indicate the "file name" and line number of my error.
>> 
>> I would like instead to stick in a file name so that the file name appears
>> instead of "<eval>". Is there a way for me to do that?
>> 
>> I did try setting the property "ScriptEngine.FILENAME" on my script
>> context, but that seems to be a global context. It works the first time I
>> run the script, but if I call the function later on from inside another
>> script, the file name doesn't "stick" to the code.
>> 
>> I can provide an example if I need to, but is there anything you guys can
>> think of that I can do in order to get a file name to stick to this
>> function for the purpose of stack traces?
>> 
>> --
>> *greg brail* | *apigee <https://apigee.com/>* | twitter
>> @gbrail<http://twitter.com/gbrail>
>> 
> 
> 
> 
> -- 
> Benjamin Sieffert
> metrigo GmbH
> Sternstr. 106
> 20357 Hamburg
> 
> Geschäftsführer: Christian Müller, Tobias Schlottke, Philipp Westermeyer,
> Martin Rieß
> Die Gesellschaft ist eingetragen beim Registergericht Hamburg
> Nr. HRB 120447.



More information about the nashorn-dev mailing list