Java.lang.NullPointerException ao Assinar NFe (sem lógica)
9 respostas
K
kuesley
Prezados,
Toda vez que reinicio o TOMCAT e vou assinar uma NFe na primeira vez ele dá um java.lang.NullPointerException
reinicio novamente e mando assinar dai funciona. Esse erro me persegue a quase 1 ano.
Alguém já passou por isso?
NodeListelements=doc.getElementsByTagName("infNFe"); .w3c.dom.Elementel=(org.w3c.dom.Element)elements.item(0);Stringid=el.getAttribute("Id"); *** o erro acontece nesta linha. O objeto "el" é nulo
cara, detalha mais, as linhas seguintes do NullPointer são quais?
Já percebeu em que momento da aplicação dispara a mensagem?
K
kuesley
JuniorMaia:
cara, detalha mais, as linhas seguintes do NullPointer são quais?
Já percebeu em que momento da aplicação dispara a mensagem?
Código.
o erro é null pointer exception
publicByteArrayOutputStreamassinarNFe(byte[]bytes)throwsException{DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);ByteArrayInputStreambais=newByteArrayInputStream(bytes);Documentdoc=dbf.newDocumentBuilder().parse(bais);doc.getDocumentElement().removeAttribute("xmlns:ns2");sig=XMLSignatureFactory.getInstance("DOM");ArrayList<Transform>transformList=newArrayList<Transform>();Transformenveloped=sig.newTransform(Transform.ENVELOPED,(TransformParameterSpec)null);Transformc14n=sig.newTransform(C14N_TRANSFORM_METHOD,(TransformParameterSpec)null);transformList.add(enveloped);transformList.add(c14n);NodeListelements=doc.getElementsByTagName("infNFe");org.w3c.dom.Elementel=(org.w3c.dom.Element)elements.item(0);// o erro é sempre aqui:Stringid=el.getAttribute("Id");// não chega nas linhas de baixo Referencer=sig.newReference("#".concat(id),sig.newDigestMethod(DigestMethod.SHA1,null),transformList,null,null);si=sig.newSignedInfo(sig.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE,(C14NMethodParameterSpec)null),sig.newSignatureMethod(SignatureMethod.RSA_SHA1,null),Collections.singletonList(r));KeyInfoFactorykif=sig.getKeyInfoFactory();Listx509Content=newArrayList();
Apos a exceção basta reiniciar o tomcat e mandar assinar a nota que funciona. :shock:
J
JuniorMaia
o problema está na captura do id pelo getAttribute, como ele é “requisito” para a continuação do código, o sistema trava, você precisa verificar se esse id realmente está no documento na hora que você chama os métodos, o que eu sempre faço no meu ide é antes de chegar onde está o erro, retornar um println com o valor da variável errônea, por exemplo no seu caso:
publicByteArrayOutputStreamassinarNFe(byte[]bytes)throwsException{DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);ByteArrayInputStreambais=newByteArrayInputStream(bytes);Documentdoc=dbf.newDocumentBuilder().parse(bais);doc.getDocumentElement().removeAttribute("xmlns:ns2");sig=XMLSignatureFactory.getInstance("DOM");ArrayList<Transform>transformList=newArrayList<Transform>();Transformenveloped=sig.newTransform(Transform.ENVELOPED,(TransformParameterSpec)null);Transformc14n=sig.newTransform(C14N_TRANSFORM_METHOD,(TransformParameterSpec)null);transformList.add(enveloped);transformList.add(c14n);NodeListelements=doc.getElementsByTagName("infNFe");org.w3c.dom.Elementel=(org.w3c.dom.Element)elements.item(0);// o erro é sempre aqui: Stringid=el.getAttribute("Id");//verifica o que chegouSystem.out.println("chegou o id: "+id);
ou então, circular com um try/catch e ver se dispara a Exception:
publicByteArrayOutputStreamassinarNFe(byte[]bytes)throwsException{try{DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);ByteArrayInputStreambais=newByteArrayInputStream(bytes);Documentdoc=dbf.newDocumentBuilder().parse(bais);doc.getDocumentElement().removeAttribute("xmlns:ns2");sig=XMLSignatureFactory.getInstance("DOM");ArrayList<Transform>transformList=newArrayList<Transform>();Transformenveloped=sig.newTransform(Transform.ENVELOPED,(TransformParameterSpec)null);Transformc14n=sig.newTransform(C14N_TRANSFORM_METHOD,(TransformParameterSpec)null);transformList.add(enveloped);transformList.add(c14n);NodeListelements=doc.getElementsByTagName("infNFe");org.w3c.dom.Elementel=(org.w3c.dom.Element)elements.item(0);// o erro é sempre aqui: Stringid=el.getAttribute("Id");// não chega nas linhas de baixo Referencer=sig.newReference("#".concat(id),sig.newDigestMethod(DigestMethod.SHA1,null),transformList,null,null);si=sig.newSignedInfo(sig.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE,(C14NMethodParameterSpec)null),sig.newSignatureMethod(SignatureMethod.RSA_SHA1,null),Collections.singletonList(r));KeyInfoFactorykif=sig.getKeyInfoFactory();Listx509Content=newArrayList();}catch(Exceptione){e.getMessage(e);}
K
kuesley
Obrigado pela atenção, mas acho que não fui claro.
O problema não é exatamente no código (na minha opinião) pois se fosse deveria acontecer toda vez.
O problema é que quando reinicia o tomcat dá o erro. Depois basta reiniciar mais um vez que não dá mais.
Não preciso fazer nada, só isso já funciona. :shock:
R
Rodrigo_Sasaki
Se puder, poste a stacktrace do erro. Senão não tem como saber, cara.
K
kuesley
[ERROR] [09/05/2012 08:48:55] VendaGerarNotaFiscalEletronicaAction.gerarNotaFiscalEletronicaAfter -
java.lang.NullPointerException
at dotum.nfe.comand.Assinar2Command.assinarNFe2(Assinar2Command.java:77)
at dotum.nfe.comand.GerarCommand.execute(GerarCommand.java:162)
at dotum.business.service.NFeService.gerar(NFeService.java:259)
at dotum.business.service.NotaFiscalService.inserirNotaFiscal(NotaFiscalService.java:604)
at dotum.business.service.NotaFiscalService.gerarNotaFiscal(NotaFiscalService.java:547)
at dotum.business.service.NotaFiscalService.gerarNotaFiscalPelaVenda(NotaFiscalService.java:183)
at dotum.sales.manager.fat020.action.VendaGerarNotaFiscalEletronicaAction.gerarNotaFiscalEletronicaAfter(VendaGerarNotaFiscalEletronicaAction.java:150)
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 jedi.core.web.servlet.core.ManagerServlet.doActionAfter(ManagerServlet.java:288)
at jedi.core.web.servlet.core.ManagerServlet.doExecute(ManagerServlet.java:89)
at jedi.core.web.servlet.core.ManagerServlet.doPost(ManagerServlet.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at jedi.core.web.filter.core.ExpiresFilter.doFilter(ExpiresFilter.java:1236)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:294)
at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:183)
at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:169)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
J
JuniorMaia
cara o NullPointerException refere-se quando vc está tentando preencher uma variável que não existe ou um ponteiro… eu to achando que teu Id está vazio quando da o erro, tenta fazer um teste, inicializar o id antes…
Stringid=null;id=el.getAttribute("Id");
Apenas sugestão.
K
kuesley
JuniorMaia:
cara o NullPointerException refere-se quando vc está tentando preencher uma variável que não existe ou um ponteiro… eu to achando que teu Id está vazio quando da o erro, tenta fazer um teste, inicializar o id antes…
Stringid=null;id=el.getAttribute("Id");
Apenas sugestão.
Isso é novo pra mim. Eu estava considerando que o “el” está nulo, por isso o null pointer. Ainda mais que se fosse dentro do getAttribute veríamos isso na pilha do erro.
O que voce me diz?
J
JuniorMaia
kuesley:
JuniorMaia:
cara o NullPointerException refere-se quando vc está tentando preencher uma variável que não existe ou um ponteiro… eu to achando que teu Id está vazio quando da o erro, tenta fazer um teste, inicializar o id antes…
Stringid=null;id=el.getAttribute("Id");
Apenas sugestão.
Isso é novo pra mim. Eu estava considerando que o “el” está nulo, por isso o null pointer. Ainda mais que se fosse dentro do getAttribute veríamos isso na pilha do erro.
O que voce me diz?
Exatamente kuesley, o id está vazio pelo fato do el.getAttribute(“Id”); não estar passando nada, indiquei inicializar o id como null para ver se ele passa o erro, pois o id com um valor (mesmo sendo null), deve passar (se esse for o motivo do erro), entendeu?