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

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?