You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Bill Dudney <bd...@mac.com> on 2004/11/11 18:04:50 UTC

error handling

Hi All,

I had a bogus renderer class name in my faces-config.xml file which was  
causing a lot of problems. However the error I was getting

java.lang.IllegalStateException:  
org.apache.myfaces.webapp.webxml.WebXml.init must be called before!
          
org.apache.myfaces.webapp.webxml.WebXml.getWebXml(WebXml.java:131)
          
org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.getServletMap 
ping(JspTilesViewHandlerImpl.java:236)
          
org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView(Js 
pTilesViewHandlerImpl.java:130)
          
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java: 
290)
         javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)
          
org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilt 
erInternal(OpenSessionInViewFilter.java:170)
          
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ 
estFilter.java:73)
          
org.apache.myfaces.custom.fileupload.MultipartFilter.doFilter(MultipartF 
ilter.java:88)

was not all together helpful :-)

Turns out the problem was that the bogus class name was causing the  
whole loading of the configuration to fail so there was no render kit  
and a bunch of other bad things. The WebXml.init is called after the  
call to FacesConfigurator.configure so the init was not called which  
was the immediate cause of the error. However after much banging my  
head against the monitor I was getting null renderkits and lots of  
other bad things.

So I propose the following patch to FacesConfigurator to give a better  
warning and to allow the configuration to proceed.

Your thoughts are greatly appreciated.

If there is no objection I'll commit this code.

TTFN,

-bd-

Index: FacesConfigurator.java
===================================================================
RCS file:  
/home/cvs/incubator-myfaces/src/myfaces/org/apache/myfaces/config/ 
FacesConfigurator.java,v
retrieving revision 1.7
diff -u -r1.7 FacesConfigurator.java
--- FacesConfigurator.java	13 Oct 2004 11:50:59 -0000	1.7
+++ FacesConfigurator.java	11 Nov 2004 17:02:10 -0000
@@ -607,7 +607,14 @@
              for (Iterator renderers =  
_dispenser.getRenderers(renderKitId); renderers.hasNext();)
              {
                  Renderer element = (Renderer) renderers.next();
-                javax.faces.render.Renderer renderer =  
(javax.faces.render.Renderer)  
ClassUtils.newInstance(element.getRendererClass());
+                javax.faces.render.Renderer renderer = null;
+                try {
+                  renderer = (javax.faces.render.Renderer)  
ClassUtils.newInstance(element.getRendererClass());
+                } catch(FacesException e) {
+                  // ignore the failure so that the render kit is  
configured
+                  log.error("failed to configure class " +  
element.getRendererClass(), e);
+                  continue;
+                }

                  renderKit.addRenderer(element.getComponentFamily(),  
element.getRendererType(), renderer);
              }

Re: error handling

Posted by Manfred Geiler <ma...@apache.org>.
+1
Manfred

Bill Dudney wrote:
> Hi All,
> 
> I had a bogus renderer class name in my faces-config.xml file which was 
> causing a lot of problems. However the error I was getting
> 
> java.lang.IllegalStateException: 
> org.apache.myfaces.webapp.webxml.WebXml.init must be called before!
> 
> org.apache.myfaces.webapp.webxml.WebXml.getWebXml(WebXml.java:131)
> 
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.getServletMapping(JspTilesViewHandlerImpl.java:236) 
> 
> 
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView(JspTilesViewHandlerImpl.java:130) 
> 
> 
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:290)
> javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)
> 
> org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) 
> 
> 
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:73) 
> 
> 
> org.apache.myfaces.custom.fileupload.MultipartFilter.doFilter(MultipartFilter.java:88) 
> 
> 
> was not all together helpful :-)
> 
> Turns out the problem was that the bogus class name was causing the 
> whole loading of the configuration to fail so there was no render kit 
> and a bunch of other bad things. The WebXml.init is called after the 
> call to FacesConfigurator.configure so the init was not called which was 
> the immediate cause of the error. However after much banging my head 
> against the monitor I was getting null renderkits and lots of other bad 
> things.
> 
> So I propose the following patch to FacesConfigurator to give a better 
> warning and to allow the configuration to proceed.
> 
> Your thoughts are greatly appreciated.
> 
> If there is no objection I'll commit this code.
> 
> TTFN,
> 
> -bd-
> 
> Index: FacesConfigurator.java
> ===================================================================
> RCS file: 
> /home/cvs/incubator-myfaces/src/myfaces/org/apache/myfaces/config/FacesConfigurator.java,v 
> 
> retrieving revision 1.7
> diff -u -r1.7 FacesConfigurator.java
> --- FacesConfigurator.java 13 Oct 2004 11:50:59 -0000 1.7
> +++ FacesConfigurator.java 11 Nov 2004 17:02:10 -0000
> @@ -607,7 +607,14 @@
> for (Iterator renderers = _dispenser.getRenderers(renderKitId); 
> renderers.hasNext();)
> {
> Renderer element = (Renderer) renderers.next();
> - javax.faces.render.Renderer renderer = (javax.faces.render.Renderer) 
> ClassUtils.newInstance(element.getRendererClass());
> + javax.faces.render.Renderer renderer = null;
> + try {
> + renderer = (javax.faces.render.Renderer) 
> ClassUtils.newInstance(element.getRendererClass());
> + } catch(FacesException e) {
> + // ignore the failure so that the render kit is configured
> + log.error("failed to configure class " + element.getRendererClass(), e);
> + continue;
> + }
> 
> 
> renderKit.addRenderer(element.getComponentFamily(), 
> element.getRendererType(), renderer);
> }
> 

Re: error handling

Posted by Grant Smith <gr...@marathon-man.com>.
+1
Grant

On Thursday 11 November 2004 09:04, Bill Dudney wrote:
> Hi All,
>
> I had a bogus renderer class name in my faces-config.xml file which was
> causing a lot of problems. However the error I was getting
>
> java.lang.IllegalStateException:
> org.apache.myfaces.webapp.webxml.WebXml.init must be called before!
>
> org.apache.myfaces.webapp.webxml.WebXml.getWebXml(WebXml.java:131)
>
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.getServletMap
> ping(JspTilesViewHandlerImpl.java:236)
>
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView(Js
> pTilesViewHandlerImpl.java:130)
>
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
> 290)
>          javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)
>
> org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilt
> erInternal(OpenSessionInViewFilter.java:170)
>
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ
> estFilter.java:73)
>
> org.apache.myfaces.custom.fileupload.MultipartFilter.doFilter(MultipartF
> ilter.java:88)
>
> was not all together helpful :-)
>
> Turns out the problem was that the bogus class name was causing the
> whole loading of the configuration to fail so there was no render kit
> and a bunch of other bad things. The WebXml.init is called after the
> call to FacesConfigurator.configure so the init was not called which
> was the immediate cause of the error. However after much banging my
> head against the monitor I was getting null renderkits and lots of
> other bad things.
>
> So I propose the following patch to FacesConfigurator to give a better
> warning and to allow the configuration to proceed.
>
> Your thoughts are greatly appreciated.
>
> If there is no objection I'll commit this code.
>
> TTFN,
>
> -bd-
>
> Index: FacesConfigurator.java
> ===================================================================
> RCS file:
> /home/cvs/incubator-myfaces/src/myfaces/org/apache/myfaces/config/
> FacesConfigurator.java,v
> retrieving revision 1.7
> diff -u -r1.7 FacesConfigurator.java
> --- FacesConfigurator.java	13 Oct 2004 11:50:59 -0000	1.7
> +++ FacesConfigurator.java	11 Nov 2004 17:02:10 -0000
> @@ -607,7 +607,14 @@
>               for (Iterator renderers =
> _dispenser.getRenderers(renderKitId); renderers.hasNext();)
>               {
>                   Renderer element = (Renderer) renderers.next();
> -                javax.faces.render.Renderer renderer =
> (javax.faces.render.Renderer)
> ClassUtils.newInstance(element.getRendererClass());
> +                javax.faces.render.Renderer renderer = null;
> +                try {
> +                  renderer = (javax.faces.render.Renderer)
> ClassUtils.newInstance(element.getRendererClass());
> +                } catch(FacesException e) {
> +                  // ignore the failure so that the render kit is
> configured
> +                  log.error("failed to configure class " +
> element.getRendererClass(), e);
> +                  continue;
> +                }
>
>                   renderKit.addRenderer(element.getComponentFamily(),
> element.getRendererType(), renderer);
>               }

Re: error handling

Posted by Sylvain Vieujot <sv...@apache.org>.
I fully subscribe to this change !

On Thu, 2004-11-11 at 10:04 -0700, Bill Dudney wrote:

> 
> 
> ______________________________________________________________________
> 
> Hi All,
> 
> I had a bogus renderer class name in my faces-config.xml file which
> was causing a lot of problems. However the error I was getting
> 
> java.lang.IllegalStateException:
> org.apache.myfaces.webapp.webxml.WebXml.init must be called before!
>        org.apache.myfaces.webapp.webxml.WebXml.getWebXml
> (WebXml.java:131)
> 
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.getServletMapping(JspTilesViewHandlerImpl.java:236)
> 
> org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView
> (JspTilesViewHandlerImpl.java:130)
>        org.apache.myfaces.lifecycle.LifecycleImpl.render
> (LifecycleImpl.java:290)
>         javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)
> 
> org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170)
>        org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:73)
>        org.apache.myfaces.custom.fileupload.MultipartFilter.doFilter
> (MultipartFilter.java:88)
> 
> was not all together helpful :-)
> 
> Turns out the problem was that the bogus class name was causing the
> whole loading of the configuration to fail so there was no render kit
> and a bunch of other bad things. The WebXml.init is called after the
> call to FacesConfigurator.configure so the init was not called which
> was the immediate cause of the error. However after much banging my
> head against the monitor I was getting null renderkits and lots of
> other bad things.
> 
> So I propose the following patch to FacesConfigurator to give a better
> warning and to allow the configuration to proceed.
> 
> Your thoughts are greatly appreciated.
> 
> If there is no objection I'll commit this code.
> 
> TTFN,
> 
> -bd-
> 
> Index: FacesConfigurator.java
> ===================================================================
> RCS file: /home/cvs/incubator-
> myfaces/src/myfaces/org/apache/myfaces/config/FacesConfigurator.java,v
> retrieving revision 1.7
> diff -u -r1.7 FacesConfigurator.java
> --- FacesConfigurator.java 13 Oct 2004 11:50:59 -0000 1.7
> +++ FacesConfigurator.java 11 Nov 2004 17:02:10 -0000
> @@ -607,7 +607,14 @@
>              for (Iterator renderers = _dispenser.getRenderers
> (renderKitId); renderers.hasNext();)
>              {
>                  Renderer element = (Renderer) renderers.next();
> -                javax.faces.render.Renderer renderer =
> (javax.faces.render.Renderer) ClassUtils.newInstance
> (element.getRendererClass());
> +                javax.faces.render.Renderer renderer = null;
> +                try {
> +                  renderer = (javax.faces.render.Renderer)
> ClassUtils.newInstance(element.getRendererClass());
> +                } catch(FacesException e) {
> +                  // ignore the failure so that the render kit is
> configured
> +                  log.error("failed to configure class " +
> element.getRendererClass(), e);
> +                  continue;
> +                }
> 
>                  renderKit.addRenderer(element.getComponentFamily(),
> element.getRendererType(), renderer);
>              }