Hi Malcolm,

If the template threw a normal Exception the error was wrapped in a TemplateException and passed to ErrorReport. Inside ErrorReport a check is made if the error is a TemplateException. If it is, a check is made if the TemplateName is set nor not. If the TemplateName is *not* set, as will be the case of a NPE, very little diagnostics is given. So I reverted TemplateService to throw a normal exception instead of wrapping it in a TE. This way the other code path is followed when diagnostics is provided for the Exception.

Another way we could resolve it is to provide the templatePath when a normal 
Exception is thrown?

kind regards

bob

On 7/03/2010 10:32 PM, Malcolm Edgar wrote:
Hi Bob,

What was the exception issue caused by this refactoring?

regards Malcolm Edgar

---------- Forwarded message ----------
From:<[email protected]>
Date: Sun, Mar 7, 2010 at 8:33 PM
Subject: svn commit: r919953 - in
/click/trunk/click/framework/src/org/apache/click/service:
TemplateService.java VelocityTemplateService.java
To: [email protected]


Author: sabob
Date: Sun Mar  7 09:33:51 2010
New Revision: 919953

URL: http://svn.apache.org/viewvc?rev=919953&view=rev
Log:
fixed exception handling caused by CLK-606 refactoring

Modified:
    
click/trunk/click/framework/src/org/apache/click/service/TemplateService.java
    
click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java

Modified: 
click/trunk/click/framework/src/org/apache/click/service/TemplateService.java
URL: 
http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/TemplateService.java?rev=919953&r1=919952&r2=919953&view=diff
==============================================================================
--- 
click/trunk/click/framework/src/org/apache/click/service/TemplateService.java
(original)
+++ 
click/trunk/click/framework/src/org/apache/click/service/TemplateService.java
Sun Mar  7 09:33:51 2010
@@ -76,7 +76,7 @@
      * @throws TemplateException if template error occurs
      */
     public void renderTemplate(Page page, Map<String, Object>  model,
Writer writer)
-        throws IOException, TemplateException;
+        throws TemplateException, Exception;

     /**
      * Render the given template and model to the writer.
@@ -88,6 +88,6 @@
      * @throws TemplateException if template error occurs
      */
     public void renderTemplate(String templatePath, Map<String,
Object>  model, Writer writer)
-        throws IOException, TemplateException;
+        throws TemplateException, Exception;

  }

Modified: 
click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java
URL: 
http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java?rev=919953&r1=919952&r2=919953&view=diff
==============================================================================
--- 
click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java
(original)
+++ 
click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java
Sun Mar  7 09:33:51 2010
@@ -31,6 +31,7 @@
  import javax.servlet.ServletContext;

  import org.apache.click.Page;
+import org.apache.click.Context;
  import org.apache.click.util.ClickUtils;
  import org.apache.click.util.ErrorReport;
  import org.apache.commons.lang.Validate;
@@ -315,7 +316,7 @@
      * @throws TemplateException if template error occurs
      */
     public void renderTemplate(Page page, Map<String, Object>  model,
Writer writer)
-        throws IOException, TemplateException {
+        throws TemplateException, Exception {

         String templatePath = page.getTemplate();

@@ -338,7 +339,7 @@
      * @throws Exception if an error occurs
      */
     public void renderTemplate(String templatePath, Map<String,
Object>  model, Writer writer)
-        throws IOException, TemplateException {
+        throws TemplateException, Exception {

         internalRenderTemplate(templatePath, null, model, writer);
     }
@@ -506,7 +507,7 @@
                                           Page page,
                                           Map<String, Object>  model,
                                           Writer writer)
-        throws IOException, TemplateException {
+        throws TemplateException, Exception {

         final VelocityContext velocityContext = new VelocityContext(model);

@@ -534,9 +535,6 @@

             template.merge(velocityContext, velocityWriter);

-        } catch (IOException ioe) {
-            throw ioe;
-
         } catch (ParseErrorException pee) {
             TemplateException te = new TemplateException(pee,
                                                          pee.getTemplateName(),
@@ -615,16 +613,23 @@
             throw te;

         } catch (Exception error) {
-            TemplateException te = new TemplateException(error);

             // Exception occurred merging template and model. It is possible
             // that some output has already been written, so we will append the
             // error report to the previous output.
+
+            Context context = null;
+            if (page == null) {
+                context = Context.getThreadLocalContext();
+            } else {
+                context = page.getContext();
+            }
+
             ErrorReport errorReport =
-                new ErrorReport(te,
+                new ErrorReport(error,
                         ((page != null) ? page.getClass() : null),
                         configService.isProductionMode(),
-                        page.getContext().getRequest(),
+                        context.getRequest(),
                         configService.getServletContext());

             if (velocityWriter == null) {
@@ -634,7 +639,7 @@

             velocityWriter.write(errorReport.toString());

-            throw te;
+            throw error;

         } finally {
             if (velocityWriter != null) {


Reply via email to