Tuesday, 15 January 2013

Java 8 Nashorn - capturing engine.eval("print('hello world')) into String object? -



Java 8 Nashorn - capturing engine.eval("print('hello world')) into String object? -

is there way capture result of print('hello world') within nashorn , place in string object.

i have tried this:

bytearrayoutputstream baos = new bytearrayoutputstream(); printstream ps = new printstream(baos, true); system.setout(ps); string result = (string)engine.eval("print('hello world')"); if (result != null) { system.out.println(result); } else { system.out.println(baos.tostring()); }

when engine evaluates javascript prints stdout figured redirect stdout own outputstream , convert string, doesn't work.

any thoughts?

you setting system.out stream after have created engine it’s engine’s context has recorded value of system.out/system.err @ construction time.

therefore still see output of script on console. worse, don’t see output of own later-on system.out.println anymore have redirected system.out bytearrayoutputstream.

so don’t modify system.out, instead alter output in context of scripting engine engine.getcontext().setwriter(stringwriter).

complete code:

stringwriter sw=new stringwriter(); engine.getcontext().setwriter(sw); string result = (string)engine.eval("print('hello world')"); system.out.println("result returned eval(): "+result); system.out.println("captured output: "+sw);

java java-8 nashorn

No comments:

Post a Comment