H:selectOneMenu

Boa tarde

Mais uma vez venho pedir arrego ao guj.
Dessa vez é com o componente do jsf h:selectOneMenu.

Não estou conseguindo popular uma lista para poder carregar as informações na minha pagina.
Li varios topicos aqui no guj mas não estou conseguindo entender.
quando vou executar está dando estouro de pilha.

vejam o erro:

javax.faces.FacesException: org.apache.jasper.el.JspELException: /gestaoProdutoNovo.jsp(72,48) '#{ProdutoMB.categoria}' Error reading 'categoria' on type ade.mb.produto.ProdutoMB
        at javax.faces.component.UISelectItems.getValue(UISelectItems.java:133)
        at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:323)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:675)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:793)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
        at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.jasper.el.JspELException: /gestaoProdutoNovo.jsp(72,48) '#{ProdutoMB.categoria}' Error reading 'categoria' on type ade.mb.produto.ProdutoMB
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
        at javax.faces.component.UISelectItems.getValue(UISelectItems.java:130)
        ... 31 more
Caused by: java.lang.StackOverflowError
        at ade.mb.produto.ProdutoMB.getCategoria(ProdutoMB.java:84)
        at ade.mb.produto.ProdutoMB.getCategoria(ProdutoMB.java:84)
        at ade.mb.produto.ProdutoMB.getCategoria(ProdutoMB.java:84)

o metodo DAO que busca as informações está assim:


    public List<SelectItem> getAll() throws ClassNotFoundException, SQLException {
        List<SelectItem> toReturn = new ArrayList<SelectItem>();
        System.out.println("passei por aqui buscando todos as categorias");
        ResultSet rs = pegaDeclaracao().executeQuery("select * from tbl_categorias");
        while (rs.next()) {
            ProdutoCategoria categoria = new ProdutoCategoria();
             PopulaAllCategoria(categoria, rs);
           

        }
        return toReturn;
    }

    private void PopulaAllCategoria(ProdutoCategoria categoria, ResultSet rs) throws
            SQLException {
        categoria.setIdCat(rs.getInt("id_categ"));
        categoria.setNomeCat(rs.getString("nome_categ"));
    }
 

e o meu bean está assim:

public List<SelectItem> getCategoria() throws ClassNotFoundException,
            SQLException {

        if (categorias == null) {
            categoriaDao.getAll();
           
        }
        return getCategoria();
    }

Veja que no final do getCategoria() vc faz uma chamada a getCategoria().
O resultado só pode ser StackOverflow.

fiz algumas alterações e está dando o seguinte erro

Caused by: org.apache.jasper.el.JspELException: /gestaoProdutoNovo.jsp(72,48) '#{ProdutoMB.categoria}' Error reading 'categoria' on type ade.mb.produto.ProdutoMB
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
        at javax.faces.component.UISelectItems.getValue(UISelectItems.java:130)
        ... 31 more
Caused by: java.lang.NullPointerException
        at ade.mb.produto.ProdutoMB.getCategoria(ProdutoMB.java:82)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:114)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
        ... 32 more

as alterações que fiz foram as seguintes:

    public List<SelectItem> getCategoria() throws ClassNotFoundException,
            SQLException {
           List<SelectItem> toReturn = new ArrayList<SelectItem>();
for(ProdutoCategoria cat: this.categorias){
    toReturn.add(new SelectItem(cat.getIdCat(),cat.getNomeCat()));
    //toReturn.add(new SelectItem(cat,cat.getNomeCat()));

}
            
        return toReturn;
    }

Veja no stack trace a NullPointerException, que ocorreu na linha 82 da classe produtoMB.
Deve ter acontecido nesse for

for(ProdutoCategoria cat: this.categorias){
}

o categorias deve estar nulo.

Outra coisa, tire do seu método as exceptions que estão sendo lançadas, como a SQLException e ClassNotFoundException.
Devem ter vindo com o Ctrl + c + Ctrl + v.