public Object eval(final Reader reader, final ScriptContext context) { String line; Iterable result; StringBuilder script = new StringBuilder(); BufferedReader bReader = new BufferedReader(reader); try { // read whole script before evaluation while ((line = bReader.readLine()) != null) { script.append(line).append("\n"); } // evaluate script result = this.evaluate(script.toString(), convertContext(context)); // flushing output streams context.getWriter().flush(); typeCastContextBindings(context); } catch (SyntaxErrorException e) { throw e; } catch (Exception e) { throw new RuntimeException(e.getMessage()); } return result; }