Ejb3 + JSF: Duvida com conversores

15/11/2009

0

Pessoal, os conversores aceitam a injeção do @EJB?
pois eu estou tentando utilizar os conversores do jsf, porem a minha interface que era pra ser injetada no conversor esta null, me causando o erro de nullpointer alguem sabe o que esta rolando ?

segue stack

20:55:57,237 ERROR [lifecycle] JSF1054: (Phase ID: PROCESS_VALIDATIONS 3, View ID: /pages/manterFornecedor/manterFornecedorIncluir.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@5b9cff]
20:55:57,240 ERROR [BaseXMLFilter] Exception in the filter chain
javax.servlet.ServletException
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
    at br.inf.techsolinfo.conversores.UnidadeFederativaConversor.getAsObject(UnidadeFederativaConversor.java:21)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:167)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:942)
    at javax.faces.component.UIInput.validate(UIInput.java:868)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
    at javax.faces.component.UIInput.processValidators(UIInput.java:672)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058)
    at javax.faces.component.UIForm.processValidators(UIForm.java:235)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058)
    at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:442)
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:235)
    at org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:458)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    ... 26 more
20:55:57,242 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at br.inf.techsolinfo.conversores.UnidadeFederativaConversor.getAsObject(UnidadeFederativaConversor.java:21)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:167)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:942)
    at javax.faces.component.UIInput.validate(UIInput.java:868)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
    at javax.faces.component.UIInput.processValidators(UIInput.java:672)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058)
    at javax.faces.component.UIForm.processValidators(UIForm.java:235)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058)
    at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:442)
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:235)
    at org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:458)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

Rodrigo Carmo

Rodrigo Carmo

Responder

Posts

16/11/2009

Andrei Hirata

Ola amigo.Vc taq usando ejb3 ou ejb3.1? a versao 3.1 nao ha necessidade de interfases.Bota o codigo ae para dar uma olhada.Esquisito isto que vc afirmou se a pagina jsp suporta injecao.para falar a verdade . O manager beam que suporta injecao @ejb para injetar o ejb para seu manager controlar a pagina jsp. Passa a parte do faceconfig e web xml.geralmente pode ser la tambem
Responder

16/11/2009

Andrei Hirata

CORRECAO = interfases locais
Responder

16/11/2009

Rodrigo Carmo

o erro esta acontecendo na minha classe de conversao:

ele consegue recuperar o id passado pelo form corretamente, mas quando vou instancio  o metodo da interface ele lança a excessao.

segue abaixo:

public class UnidadeFederativaConversor implements Converter{
   
    @EJB
    private IUnidadeFederativaRemote unidadeFederativaRemote;
   
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        Integer unidadeFederativaId = Integer.parseInt(arg2);
       
        if(unidadeFederativaId!=null){
            // o erro esta nessa linha
            return unidadeFederativaRemote.getUnidadeFederativaById(unidadeFederativaId);
        }
       
        return null;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        UnidadeFederativa unidadeFederativa = (UnidadeFederativa) arg2;
        return String.valueOf(unidadeFederativa.getUnidadeFederativaId());
    }

}
Responder

16/11/2009

Rodrigo Carmo

Pessoal, eu consegui resolver o problema da seguinda maneira, pelo que eu andei pesquisando mais parece que os conversores nao tem o  ioc entao eh necessario que vc acesse a interface na mao msm como mostrado abaixo:

@SuppressWarnings("unchecked")
    private IUnidadeFederativaRemote unidadeFederativaRemote() throws NamingException{
       
        try {
             Hashtable props = new Hashtable(); 
             props.put( InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" ); 
             props.put( InitialContext.PROVIDER_URL, "localhost" );
             InitialContext initialContext = new InitialContext(props);
           
            return (IUnidadeFederativaRemote) initialContext.lookup("ProjetoEAR/ClasseQueImplementaAInterface/remote");
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return null;
    }


logo apos eu tive um problema de Validation Error: Value is not valid

que resolvi seguindo esse post:

http://www.rponte.com.br/2008/02/01/selectonemenu-converter-erro-de-validacao/

vlw pela ajuda.

Grande abraço.
 
Responder

18/11/2009

Dyego Carmo

Realmente , pela especificacao , conversores nao tem suporte a IoC

Afinal conversores sao da especificacao JSF e ela nao faz parte de Java EE 5 ( por incrivel que pareca)



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar