[JSF] Custom converter não atualiza o valor do bean

2 respostas
A

Bom dia, galera! Sou novato aqui no fórum, mas já acompanho como leitor há muito tempo. Diversos posts aqui já salvaram minha pele, e tal =)

Bem, direto ao ponto. Estou com um conversor aqui que pega um endereço IP (String) e o transforma em um Long. Basicamente, ele pega o IP e o trata como se fosse um número em base 256, em que cada octeto é um algarismo, e o converte para um equivalente em base 10. O algoritmo em si está correto, já o testei diversas vezes. Inclusive o Converter é chamado e todos os passos são executados, menos o de atualizar os valores. Como resultado, o IP no bean fica null. Seguem o log, com a saída de cada passo do algoritmo, e os códigos, tanto do Converter, quanto do Managed Bean:

LOG
[#|2010-10-20T12:40:11.926-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|stringToArray.ip: 200.131.34.66|#]

[#|2010-10-20T12:40:11.927-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|stringToArray.ipOctetos: 4|#]

[#|2010-10-20T12:40:11.927-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|stringToArray.ipArray: 4|#]

[#|2010-10-20T12:40:11.927-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong: 4|#]

[#|2010-10-20T12:40:11.927-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[0]: 200|#]

[#|2010-10-20T12:40:11.927-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[0]*Math.pow(256,3): 8.589934592E11|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.intIP: [telefone removido]|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[1]: 131|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[1]*Math.pow(256,2): 2.197815296E9|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.intIP: [telefone removido]|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[2]: 34|#]

[#|2010-10-20T12:40:11.928-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[2]*Math.pow(256,1): 2228224.0|#]

[#|2010-10-20T12:40:11.929-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.intIP: [telefone removido]|#]

[#|2010-10-20T12:40:11.929-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[3]: 66|#]

[#|2010-10-20T12:40:11.929-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.ip[3]*Math.pow(256,0): 16896.0|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|arrayToLong.intIP: [telefone removido]|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|stringToLong.ipLong: [telefone removido]|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|longToArray.ipArray.length: 4|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|longToArray.ipArray[3]: 200|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|longToArray.ipArray[2]: 131|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|longToArray.ipArray[1]: 34|#]

[#|2010-10-20T12:40:11.930-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|longToArray.ipArray[0]: 66|#]

[#|2010-10-20T12:40:11.931-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.IPUtils|_ThreadID=31;_ThreadName=Thread-1;|IP convertido para long e convertido de volta: 200.131.34.66|#]

[#|2010-10-20T12:40:11.933-0200|INFO|glassfish3.0.1|br.cefetmg.ccc.gerir.web.RedesBean|_ThreadID=31;_ThreadName=Thread-1;|ipBase: null|#]

[#|2010-10-20T12:40:11.933-0200|SEVERE|glassfish3.0.1|javax.enterprise.resource.webcontainer.jsf.application|_ThreadID=31;_ThreadName=Thread-1;|java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	at javax.faces.component.UICommand.broadcast(UICommand.java:311)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
	at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:158)
	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 com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	... 32 more
|#]

[#|2010-10-20T12:40:12.032-0200|WARNING|glassfish3.0.1|javax.enterprise.resource.webcontainer.jsf.lifecycle|_ThreadID=31;_ThreadName=Thread-1;|#{redes.cadastraNova}: java.lang.NullPointerException
javax.faces.FacesException: #{redes.cadastraNova}: java.lang.NullPointerException
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114)
	at javax.faces.component.UICommand.broadcast(UICommand.java:311)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	... 31 more
Caused by: java.lang.NullPointerException
	at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:158)
	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 com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	... 32 more
|#]

[#|2010-10-20T12:40:12.159-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=http-thread-pool-8080-(2);|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	at javax.faces.component.UICommand.broadcast(UICommand.java:311)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
	at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:158)
	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 com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	... 32 more
|#]

[#|2010-10-20T12:40:12.159-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=Thread-1;|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	at javax.faces.component.UICommand.broadcast(UICommand.java:311)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
	at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:158)
	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 com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	... 32 more
|#]

[#|2010-10-20T12:40:12.159-0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=http-thread-pool-8080-(2);|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	at javax.faces.component.UICommand.broadcast(UICommand.java:311)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
	at br.cefetmg.ccc.gerir.web.RedesBean.cadastraNova(RedesBean.java:158)
	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 com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	... 32 more
|#]
IPUtils.java (o converter)
package br.cefetmg.ccc.gerir.helper;

import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;

public class IPUtils implements Converter{
	private static final Logger logger = Logger.getLogger("br.cefetmg.ccc.gerir.web.IPUtils");

	public static short[] stringToArray(String ip){
		if(ip.matches("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"+
		"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b")){
			String[] ipOctetos = ip.split("\\.");
			short[] ipArray = new short[ipOctetos.length];
			logger.info("stringToArray.ip: " + ip);
			logger.info("stringToArray.ipOctetos: " + ipOctetos.length);
			logger.info("stringToArray.ipArray: " + ipArray.length);
			for(int i=0; i<ipArray.length; i++){
				ipArray[i] = (short) Integer.parseInt(ipOctetos[i]);
			}
			return ipArray;
		}
		else throw new ConverterException();
	}
	public static String arrayToString(short[] ip){
		String ipString = "";
		for(int i=1; i<=ip.length; i++){
			ipString += Integer.toString(ip[ip.length-i]);
			if(i<(ip.length)) ipString += ".";
		}
		return ipString;
	}
	
	/**
	 * Em última análise, o IP nada mais é do que um número em base 256.
	 * Portanto, faz todo o sentido convertê-lo para um inteiro em base 10!
	 * inb4 gambiarra
	 * @param ip IP no formato a.b.c.d ("base 256")
	 * @return IP em "base 10"
	 */
	public static Long arrayToLong(short[] ip){
		long intIP = 0;
		logger.info("arrayToLong: " + ip.length);
		for(int casas = ip.length; casas>0; casas--){
			logger.info("arrayToLong.ip[" + (ip.length-casas) + "]: " + (ip[ip.length-casas]));
			intIP += ip[ip.length-casas]*Math.pow(256, (casas-1));
			logger.info("arrayToLong.ip[" + (ip.length-casas) + "]*Math.pow(256," + (casas-1) +"): " + ip[ip.length-casas]*Math.pow(256, casas));
			logger.info("arrayToLong.intIP: " + intIP);
		}
		return intIP;
	}
	public static short[] longToArray(long ip){
		short[] ipArray = new short[4];
		logger.info("longToArray.ipArray.length: " + ipArray.length);
		for(int i=(ipArray.length-1); i>=0; i--){
			ipArray[i] = (short) ((ip/Math.pow(256,i))%256);
			logger.info("longToArray.ipArray["+i+"]: " + ipArray[i]);
			}
		return ipArray;
	}
	
	public static long stringToLong(String ip){
		Long ipLong = arrayToLong(stringToArray(ip));
		logger.info("stringToLong.ipLong: " + ipLong);
		return ipLong;
	}
	public static String longToString(long ip){
		return arrayToString(longToArray(ip));
	}
	
	@Override
	public Object getAsObject(
			FacesContext context,
			UIComponent component,
			String ip
			)
	{
		Long intIP;
		if(ip.matches("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"+
				"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b")){
			intIP = stringToLong(ip);
			logger.info("IP convertido para long e convertido de volta: " + longToString(intIP));
			return intIP;
		}
		else throw new ConverterException("Formato inválido");
	}
	@Override
	public String getAsString(
			FacesContext context,
			UIComponent component,
			Object ip
			)
	{
		logger.info("getAsString.ip:" + longToString((Long) ip));
		return longToString((Long) ip);
	}
}
RedesBean.java
package br.cefetmg.ccc.gerir.web;

import java.util.*;
import java.util.logging.*;
import br.cefetmg.ccc.gerir.database.*;
import br.cefetmg.ccc.gerir.helper.*;
import javax.ejb.*;
import javax.faces.*;
import javax.faces.bean.*;

/**
 * Bean que cuida das redes e subredes.
 * @author Alkmim
 *
 */
@ManagedBean(name="redes")
@SessionScoped
public class RedesBean {
	@EJB
	RedeDAO redeDAO;
	
	private static final Logger logger = Logger.getLogger("br.cefetmg.ccc.gerir.web.RedesBean");
	
	// atributos da rede
	private Long id;
	private String nome;
	private Long ipBase;
	private short cidr;
	private Long netmask;
	private ArrayList<Long> routers;
	private ArrayList<Long> dns;
	private ArrayList<Long> netbios;
	private Long broadcast;
	private Long leaseDefault;
	private Long leaseMax;
	private Long rangeMin;
	private Long rangeMax;
	private List<Registro> Registros;
	
	// getters e setters dos atributos da rede
	public Long getId(){
		return id;
	}
	public void setId(Long id){
		this.id = id;
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public Long getIpBase() {
		return ipBase;
	}
	public void setIpBase(Long ipBase) {
		this.ipBase = ipBase;
		logger.info("ipBase: " + ipBase);
		logger.info("IPUtils.longToString(ipBase):" + IPUtils.longToString(ipBase));
	}

	public short getCidr() {
		return cidr;
	}
	public void setCidr(short cidr) {
		this.cidr = cidr;
	}

	public Long getNetmask() {
		return netmask;
	}
	public void setNetmask(Long netmask) {
		this.netmask = netmask;
	}

	public ArrayList<Long> getRouters(){
		return routers;
	}
	public void setRouters(ArrayList<Long> routers) {
		this.routers = routers;
	}
	
	public ArrayList<Long> getDns() {
		return dns;
	}
	public void setDns(ArrayList<Long> dns) {
		this.dns = dns;
	}

	public ArrayList<Long> getNetbios() {
		return netbios;
	}
	public void setNetbios(ArrayList<Long> netbios) {
		this.netbios = netbios;
	}

	public String getBroadcast() {
		return IPUtils.longToString(broadcast);
	}
	public void setBroadcast(String broadcast) {
		this.broadcast = IPUtils.stringToLong(broadcast);
	}

	public Long getLeaseDefault() {
		return leaseDefault;
	}
	public void setLeaseDefault(Long leaseDefault) {
		this.leaseDefault = leaseDefault;
	}

	public Long getLeaseMax() {
		return leaseMax;
	}
	public void setLeaseMax(Long leaseMax) {
		this.leaseMax = leaseMax;
	}

	public Long getRangeMin() {
		return rangeMin;
	}
	public void setRangeMin(Long rangeMin) {
		this.rangeMin = rangeMin;
	}

	public Long getRangeMax() {
		return rangeMax;
	}
	public void setRangeMax(Long rangeMax) {
		this.rangeMax = rangeMax;
	}
	
	public List<Registro> getRegistros(){
		return Registros;
	}	
	public void setRegistros(List<Registro> Registros){
		this.Registros = Registros;
	}
	// fim dos getters e setters

	/**
	 * Calcula o netmask a partir do cidr dado
	 * @return netmask short[]
	 */
	public Long calculaNetmask(){
		short[] netmask = {0, 0, 0, 0};
		for(int i=0; i<32; i++){
			if(i<cidr){
				netmask[i/8] += Math.pow(2, 7-(i%8));
			}else netmask[i/8] += 0;
		}
		return IPUtils.arrayToLong(netmask);
	}
	
	// o método chamado pela página
	public String cadastraNova(){
		logger.info("ipBase: " + ipBase);
		logger.info("IPUtils.longToString(ipBase):" + IPUtils.longToString(ipBase)); // 
		return "/redes/nova";
	}
}

2 Respostas

andreiribas

Pelo jeito, está ocorrendo o NPE porque você nunca testa se a string está vindo null antes de realizar a conversão.

A

Verifico sim. O método getAsObject só funciona se a string estiver no formato pedido, senão ele lança uma exceção, confira:

@Override public Object getAsObject( FacesContext context, UIComponent component, String ip ) { Long intIP; if(ip.matches("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"+ "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b")){ intIP = stringToLong(ip); logger.info("IP convertido para long e convertido de volta: " + longToString(intIP)); // ele executa aqui, como você pode ver no log return intIP; } else throw new ConverterException("Formato inválido"); }

Ou você está falando de verificar em outro lugar?

Criado 20 de outubro de 2010
Ultima resposta 20 de out. de 2010
Respostas 2
Participantes 2