Re: FileTemplateLoader doesnt close reader ?

Daniel Dekany <[email protected]> Wed, 13 Mar 2013 21:06:24 +0100
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
Wednesday, March 13, 2013, 3:42:36 AM, Albert Kam wrote:

[snip]
> I tried closing the reader and catching and logging the exception
> instead of just using IOTools.closeQuietly(),
> and notices that there's no exception happening, and still gave me the empty page.
> Commenting the close reader section gave me back the output.

Are you returning a StringReader before calling
IOTools.closeQuietly()on *another* reader? Because then this
phenomenon it doesn't make any sense.

[snip]
> Aha, maybe that's the reason it gave me the empty output.
> According to
> http://docs.oracle.com/javase/7/docs/api/java/io/StringReader.html#close()
> "Closes the stream and releases any system resources associated with it.
> Once the stream has been closed, further read(), ready(), mark(),
> or reset() invocations will throw an IOException. Closing a
> previously closed stream has no effect."
> Maybe the caller of the closed-reader got an IOException somewhere and hence, the empty output ?

You aren't supposed to close the StringReader inside the
TemplateLoader. You should close the *other* reader, the one that you
don't return. Also, if FreeMarker gives empty output when an
IOException occurs, that's a bug. But I hope it doesn't do that, it's
rather the framework that calls it that suppresses that exception
instead of giving a HTTP 500.

[snip]
> I actually have switched back to the normal FileTemplateLoader
> without wrapping the escape directive for several reasons :
>
> - I actually make use of functions for URLs generation.
>   And it's ugly to see the noescape tags wrapping every link calls, some thing like :
>   <#noescape>${url.home("Return to main page")}</#noescape>
>   I prefer using ?html as needed

It's a strange coincidence that you say this just after 2 weeks or so
after I have proposed #p. It addresses exactly this annoyance, but I
don't remember anybody but myself ever brought this up, till now.
Anyway, it will be in 2.3.20 most probably.

> - Because i am using JBoss Tools for the freemarker editor (which
> does help me in parsing error detection, highlighting, etc), it
> errors the line of every noescape because it's not inside an escape
> directive, which gives me the tension i dont need.

This will also be solved by #p, since then you won't need #noescpe
anymore. Indeed, I might as well deprecate #noescape then.

>  And thank you for the wrapReader sharing, i will add it to my
> library in case i find a use of it in the future.
>
> Regards from Jakarta,
> Albert Kam

-- 
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar