Moin,
kennt sich jemand mit dem Scripting Framework aus Java6 aus?
Ich habe ein Programm das u.A. aus Template-Files ein paar statische HTML-Seiten generieren muss. Zur Zeit setze ich als Template-Sprache Java selbst ein, allerdings möchte ich den Benutzern mehr Auswahl geben. Ich dachte das mir das durch das Scripting Framework gelinken könnte. Allerdings muss ich dazu den std.out der Sprachen "verbiegen". Ich habe dies über die setWriter() Methode von ScriptContext versucht. Daraufhin gibt es allerdings eine Exception mit Rhino, unbrauchbaren weil unvollständigen Output mit Beanshell und Jython schert sich gar einen Dreck darum das ich den Output umlenken will.
Der Code ist zu lang als das ich ihn hier Posten könnte... aber der relevante Teil sieht so aus:
MyWriter ist eine simple Klasse die von Writer erbt und einfach die an write(char[] cbuf, int off, int len) übergebenen Daten in einen StringBuilder schiebt. Diesen lese ich später dann aus. Im Fall von Rhino gibt es zuvor aber eine Exception und Jython schreibt alles weiterhin auf System.out.
Die Exception von Rhino:
Ich habe keine Ahnung was und ob ich was falsch mache, ob es einfach unmöglich ist, ob ich zu müde bin um einen simplen Fehler zu sehen... ich weiß nicht mal mehr was ich hier schreibe und ob man mich auch mit gutem Willen überhaubt verstehen kann... ich Ärger mich gerade nur sehr über die "verschwendete" Nacht...
MfG,
Hilefoks
kennt sich jemand mit dem Scripting Framework aus Java6 aus?
Ich habe ein Programm das u.A. aus Template-Files ein paar statische HTML-Seiten generieren muss. Zur Zeit setze ich als Template-Sprache Java selbst ein, allerdings möchte ich den Benutzern mehr Auswahl geben. Ich dachte das mir das durch das Scripting Framework gelinken könnte. Allerdings muss ich dazu den std.out der Sprachen "verbiegen". Ich habe dies über die setWriter() Methode von ScriptContext versucht. Daraufhin gibt es allerdings eine Exception mit Rhino, unbrauchbaren weil unvollständigen Output mit Beanshell und Jython schert sich gar einen Dreck darum das ich den Output umlenken will.
Der Code ist zu lang als das ich ihn hier Posten könnte... aber der relevante Teil sieht so aus:
Code:
ScriptEngineManager em=new ScriptEngineManager();
ScriptEngine e=em.getEngineByName(engine);
//...
ScriptContext c=e.getContext();
//...
MyWriter writer=new MyWriter();
c.setWriter(writer);
e.eval(parse, c);
//...
Die Exception von Rhino:
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function print. (print#8) in print at line number 8
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:124)
at playground.ui.report.html.template.Engine.merge(Engine.java:708)
at playground.ui.report.html.template.Main.main(Main.java:31)
Ich habe keine Ahnung was und ob ich was falsch mache, ob es einfach unmöglich ist, ob ich zu müde bin um einen simplen Fehler zu sehen... ich weiß nicht mal mehr was ich hier schreibe und ob man mich auch mit gutem Willen überhaubt verstehen kann... ich Ärger mich gerade nur sehr über die "verschwendete" Nacht...
MfG,
Hilefoks