Java.lang.NullPointerException ao Assinar NFe (sem lógica)

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?

NodeList elements = doc.getElementsByTagName("infNFe");  
.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);
String id = el.getAttribute("Id"); *** o erro acontece nesta linha. O objeto "el" é nulo

:cry:

cara, detalha mais, as linhas seguintes do NullPointer são quais?
Já percebeu em que momento da aplicação dispara a mensagem?

[quote=JuniorMaia]cara, detalha mais, as linhas seguintes do NullPointer são quais?
Já percebeu em que momento da aplicação dispara a mensagem?[/quote]

  • Código.
    o erro é null pointer exception
public ByteArrayOutputStream assinarNFe(byte[] bytes) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
		dbf.setNamespaceAware(true);
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
		Document doc = dbf.newDocumentBuilder().parse(bais);
		doc.getDocumentElement().removeAttribute("xmlns:ns2");
		sig = XMLSignatureFactory.getInstance("DOM");  
		ArrayList<Transform> transformList = new ArrayList<Transform>();  
		Transform enveloped= sig.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);  
		Transform c14n = sig.newTransform(C14N_TRANSFORM_METHOD, (TransformParameterSpec) null);  
		transformList.add(enveloped);  
		transformList.add(c14n);
		NodeList elements = doc.getElementsByTagName("infNFe");  
		org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);

// o erro é sempre aqui:

		String id = el.getAttribute("Id");

// não chega nas linhas de baixo 

		Reference r = 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));

		KeyInfoFactory kif = sig.getKeyInfoFactory();
		List x509Content = new ArrayList();

Apos a exceção basta reiniciar o tomcat e mandar assinar a nota que funciona. :shock:

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:

public ByteArrayOutputStream assinarNFe(byte[] bytes) throws Exception {  
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();    
        dbf.setNamespaceAware(true);  
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);  
        Document doc = dbf.newDocumentBuilder().parse(bais);  
        doc.getDocumentElement().removeAttribute("xmlns:ns2");  
        sig = XMLSignatureFactory.getInstance("DOM");    
        ArrayList<Transform> transformList = new ArrayList<Transform>();    
        Transform enveloped= sig.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);    
        Transform c14n = sig.newTransform(C14N_TRANSFORM_METHOD, (TransformParameterSpec) null);    
        transformList.add(enveloped);    
        transformList.add(c14n);  
        NodeList elements = doc.getElementsByTagName("infNFe");    
        org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);  
  
// o erro é sempre aqui:  
  
        String id = el.getAttribute("Id");  
//verifica o que chegou
        System.out.println("chegou o id: "+ id);
  

ou então, circular com um try/catch e ver se dispara a Exception:


public ByteArrayOutputStream assinarNFe(byte[] bytes) throws Exception { 
try { 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();    
        dbf.setNamespaceAware(true);  
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);  
        Document doc = dbf.newDocumentBuilder().parse(bais);  
        doc.getDocumentElement().removeAttribute("xmlns:ns2");  
        sig = XMLSignatureFactory.getInstance("DOM");    
        ArrayList<Transform> transformList = new ArrayList<Transform>();    
        Transform enveloped= sig.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);    
        Transform c14n = sig.newTransform(C14N_TRANSFORM_METHOD, (TransformParameterSpec) null);    
        transformList.add(enveloped);    
        transformList.add(c14n);  
        NodeList elements = doc.getElementsByTagName("infNFe");    
        org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);  
  
// o erro é sempre aqui:  
  
        String id = el.getAttribute("Id");  
  
// não chega nas linhas de baixo   
  
        Reference r = 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));  
  
        KeyInfoFactory kif = sig.getKeyInfoFactory();  
        List x509Content = new ArrayList(); 
}catch(Exception e) {
  e.getMessage(e);
}

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:

Se puder, poste a stacktrace do erro. Senão não tem como saber, cara.

[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)

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…

String id = null;
id = el.getAttribute("Id");  

Apenas sugestão.

[quote=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…

String id = null;
id = el.getAttribute("Id");  

Apenas sugestão.[/quote]

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?

[quote=kuesley][quote=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…

String id = null;
id = el.getAttribute("Id");  

Apenas sugestão.[/quote]

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?[/quote]

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?