2015-11-28 4 views
0

Je n'arrive pas à comprendre quel est le problème avec QuercusCompiledScript.eval. Exécution de code:La sortie QuercusCompiledScript.eval ne fonctionne pas

QuercusScriptEngine quercusScriptEngine = new QuercusScriptEngine(); 
quercusScriptEngine.eval("<?php echo 'hello uncompiled!\n'; ?>"); 
CompiledScript script = quercusScriptEngine.compile("<?php echo 'hello compiled!\n'; ?>"); 
script.eval(); 
System.out.println("that's all"); 

produit:

hello uncompiled! 
that's all 

Débogage ce genre de choses que je ne pouvais pas comprendre ce qui ne va pas, comme il le fait exécuter l'instruction, les tampons sont OK, mais la sortie elle-même n'a pas lieu.

Qu'est-ce qui ne va pas?

Répondre

0

J'ai trouvé la cause du problème. Le QuercusScriptEngine.eval() fait explicitement writer.flush() à la fin se référant au http://bugs.caucho.com/view.php?id=1914. Mais le QuercusCompiledScript.eval() ne le fait pas, au moins dans le quercus-4.0.39 (et dans le quercus-4.0.45 aussi bien). La solution de contournement consiste à rincer explicitement en fournissant un Writer:

CompiledScript script = quercusScriptEngine.compile("<?php echo 'hello compiled!\n'; ?>"); 
ScriptContext ctx = quercusScriptEngine.getContext(); 
Writer writer = new OutputStreamWriter(System.out); 
ctx.setWriter(writer); 
script.eval(ctx); 
writer.flush();