[
https://issues.apache.org/jira/browse/FREEMARKER-113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16731681#comment-16731681
]
Tinus Tate edited comment on FREEMARKER-113 at 1/1/19 10:09 PM:
After installing jetty locally i did a bit debugging and it seemed that my
TemplateExceptionHandler was called.
I did retrow the exception because i wanted it in the log system. Tomcat seems
to be fine with this and swallows the exception without printing it to the
httpresponse (Writer out param of TemplateExceptionHandler). Did read this
trick on stackoverflow.
Jetty on the other hand catches the exception and prints it. Anything the
TemplateExceptionHandler writes to the Writer out param of
TemplateExceptionHandler is lost.
I suspect this isn't something related to Freemarker but more how servlet
containers handle exceptions under certain conditions.
[edit]
After a bit more testing it appears that when not retrowing the exception in
the TemplateExceptionHandler the freemarker template will continue to render.
Throwing the exception causes the rendering to stop and no extra html is
generated after the template statement that caused the error.
But you can't retrow the exception cause when using jetty the output
TemplateExceptionHandler is ignored and the default jetty handler kicks in.
I'm not sure where the source of this problem is located.
was (Author: tinustate):
After installing jetty locally i did a bit debugging and it seemed that my
TemplateExceptionHandler was called.
I did retrow the exception because i wanted it in the log system. Tomcat seems
to be fine with this and swallows the exception without printing it to the
httpresponse (Writer out param of TemplateExceptionHandler). Did read this
trick on stackoverflow.
Jetty on the other hand catches the exception and prints it. Anything the
TemplateExceptionHandler writes to the Writer out param of
TemplateExceptionHandler is lost.
I suspect this isn't something related to Freemarker but more how servlet
containers handle exceptions under certain conditions.
[edit]
After a bit more testing it appears that when not retrowing the exception in
the TemplateExceptionHandler the freemarker template will continue to render.
Throwing the exception causes the rendering to stop and not extra html is
generated after the template statement that caused the error.
But you can't retrow the exception cause when using jetty the output
TemplateExceptionHandler is ignored and the default jetty handler kicks in.
I'm not sure where the source of this problem is located.
> TemplateExceptionHandler not working with Jetty
> ---
>
> Key: FREEMARKER-113
> URL: https://issues.apache.org/jira/browse/FREEMARKER-113
> Project: Apache Freemarker
> Issue Type: Bug
> Components: engine
>Affects Versions: 2.3.28
> Environment: java 8, jetty 9.4, freemarker 2.3.28, spring 5.1.2
>Reporter: Tinus Tate
>Priority: Major
>
> Setting a custom TemplateExceptionHandler doesn't seem to work when the
> application is deployed and running on the latest Jetty server.
> When deployed and running on a Tomcat server the TemplateExceptionHandler
> works as expected.
> To set a TemplateExceptionHandler i extended FreeMarkerConfigurer and
> override getConfiguration():
> Configuration configuration = super.getConfiguration();
> configuration.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
> return configuration;
> When a template contains an error (${null}) i can see that the
> getConfiguration() is called (i added a log line).
> With tomcat MyTemplateExceptionHandler gets called next, with jetty this
> doesn't happen. With jetty a jetty error page appears with the full
> freemarker exceptions and stacktrace,which starts with:
> HTTP ERROR 500
> Problem accessing /dash/sitesettings/change. Reason:
> Server Error
> ...
> This happens with the latest version of freemarker.
> I hope someone can take a quick peek at what is going on.
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)