myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Marinschek (JIRA)" <myfaces-...@incubator.apache.org>
Subject [jira] Commented: (MYFACES-166) exception handling in myfaces
Date Wed, 25 May 2005 15:06:59 GMT
     [ http://issues.apache.org/jira/browse/MYFACES-166?page=comments#action_66273 ]
     
Martin Marinschek commented on MYFACES-166:
-------------------------------------------

I've done the one for grid-renderer, but I am not sure if we can get rid of all of these -
the problem being that if an exception is thrown at all, you might only see it in the tomcat-logs
anymore cause tomcat doesn't print out the stacktraces?

How do we handle that correctly?

Have you tried out your approach and does it work, e.g. if a managed bean misses a property,
is then the exception still logged at some place?

regards,

Martin

> exception handling in myfaces
> -----------------------------
>
>          Key: MYFACES-166
>          URL: http://issues.apache.org/jira/browse/MYFACES-166
>      Project: MyFaces
>         Type: Sub-task
>     Versions: Nightly Build
>     Reporter: Mathias Broekelmann
>     Priority: Trivial
>      Fix For: Nightly Build

>
> Exception handling in myfaces is strange. javax.faces.FacesServlet.logException(...)
prints stacktrace through e.printStackTrace() and produces a large stacktrace.
> Calls to log.error(...) followed by a (re)thrown exception which was logged before dosn´t
make sense. The decision how and when to log an exception should only be done if the exception
can be handled and is not rethrown.
> MethodBindingImpl, PropertyResolverImpl, ValueBindingImpl also prints exception to log
and rethrow them.
> I´ve added some patches which will reduce the stacktraces. That will make it easier
for the user to find the cause of the exception.
> Index: FacesServlet.java
> ===================================================================
> RCS file: /home/cvspublic/incubator-myfaces/src/jsfapi/javax/faces/webapp/FacesServlet.java,v
> retrieving revision 1.12
> diff -u -r1.12 FacesServlet.java
> --- FacesServlet.java	13 Jul 2004 15:43:34 -0000	1.12
> +++ FacesServlet.java	5 Apr 2005 10:47:15 -0000
> @@ -162,7 +162,6 @@
>          }
>  
>           _servletConfig.getServletContext().log(msg, e);
> -        e.printStackTrace();
>  
>          Throwable cause = e.getCause();
>          if (cause != null && cause != e)
> Index: MethodBindingImpl.java
> ===================================================================
> RCS file: /home/cvspublic/incubator-myfaces/src/myfaces/org/apache/myfaces/el/MethodBindingImpl.java,v
> retrieving revision 1.17
> diff -u -r1.17 MethodBindingImpl.java
> --- MethodBindingImpl.java	13 Oct 2004 11:51:00 -0000	1.17
> +++ MethodBindingImpl.java	5 Apr 2005 10:47:28 -0000
> @@ -159,25 +159,19 @@
>                  }
>                  else
>                  {
> -                    log.error("Exception while invoking expression "
> -                        + getExpressionString(), cause);
> -                    throw new EvaluationException("Expression: "
> +                    throw new EvaluationException("Exception while invoking expression
"
>                          + getExpressionString(), cause);
>                  }
>              }
>              else
>              {
> -                log.error("Exception while invoking expression "
> -                    + getExpressionString(), e);
> -                throw new EvaluationException("Expression: "
> +                throw new EvaluationException("Exception while invoking expression "
>                      + getExpressionString(), e);
>              }
>          }
> -        catch (Exception e)
> +        catch (Throwable e)
>          {
> -            log.error("Exception while invoking expression "
> -                + getExpressionString(), e);
> -            throw new EvaluationException("Expression: "
> +            throw new EvaluationException("Exception while invoking expression "
>                  + getExpressionString(), e);
>          }
>      }
> Index: PropertyResolverImpl.java
> ===================================================================
> RCS file: /home/cvspublic/incubator-myfaces/src/myfaces/org/apache/myfaces/el/PropertyResolverImpl.java,v
> retrieving revision 1.31
> diff -u -r1.31 PropertyResolverImpl.java
> --- PropertyResolverImpl.java	9 Jan 2005 18:15:12 -0000	1.31
> +++ PropertyResolverImpl.java	5 Apr 2005 10:47:39 -0000
> @@ -229,9 +229,8 @@
>          }
>          catch (RuntimeException e)
>          {
> -            log.error("Exception setting value of index " + index + " of bean " 
> +            throw new EvaluationException("Exception setting value of index " + index
+ " of bean " 
>                  + base != null ? base.getClass().getName() : "NULL", e);
> -            throw e;
>          }
>      }
>  
> Index: ValueBindingImpl.java
> ===================================================================
> RCS file: /home/cvspublic/incubator-myfaces/src/myfaces/org/apache/myfaces/el/ValueBindingImpl.java,v
> retrieving revision 1.54
> diff -u -r1.54 ValueBindingImpl.java
> --- ValueBindingImpl.java	13 Oct 2004 11:51:00 -0000	1.54
> +++ ValueBindingImpl.java	5 Apr 2005 10:47:47 -0000
> @@ -353,21 +353,21 @@
>              throw new PropertyNotFoundException(
>                  "Expression: '" + _expressionString + "'", e);
>          }
> -        catch (Exception e)
> +        catch (Throwable e)
>          {
> +            String msg;
>              if (newValue == null)
>              {
> -                log.error("Cannot set value for expression '" 
> -                    + _expressionString + "' to null.", e);
> +                msg = "Cannot set value for expression '" 
> +                    + _expressionString + "' to null.";
>              }
>              else
>              {
> -                log.error("Cannot set value for expression '" 
> +                msg = "Cannot set value for expression '" 
>                      + _expressionString + "' to a new value of type " 
> -                    + newValue.getClass().getName(), e);
> +                    + newValue.getClass().getName();
>              }
> -            throw new EvaluationException(
> -                "Expression: '" + _expressionString + "'", e);
> +            throw new EvaluationException(msg, e);
>          }
>      }
>      
> @@ -452,19 +452,9 @@
>              throw new PropertyNotFoundException(
>                  "Expression: '" + _expressionString + "'", e);
>          }
> -        catch (Exception e)
> +        catch(ELException e)
>          {
> -            log.error("Cannot get value for expression '" + _expressionString 
> -                + "'", e);
> -
> -            if (e instanceof ELException)
> -            {
> -                log.error("Root cause for exception : ", 
> -                    ((ELException) e).getRootCause());
> -            }
> -
> -            throw new EvaluationException(
> -                "Expression: '" + _expressionString + "'", e);
> +          throw new EvaluationException(e.getRootCause());
>          }
>      }
>      

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message