Pessoal boa tarde.
Estou iniciando agora nesse mundo da NFe.
Estudei uma video aula bem interessante que fala como assinar arquivos xml e tal (ate ai blza…tudo assinadinho…heehee).
Porém, tive uns problemas com o consumo do web service que verifica o status do servico.
Utilizei os WSDL da sefaz virtual do RS no meu projeto.
Não sei se foram os passos que não foram bem seguidos (por mim claro).
Mas fiz assim:
A empresa tem um certificado digital na qual trabalhamos para assinal xml e homologar o servico pela SEFAZ.
Fiz um backup deste para cria-lo em extensao “.p12”. (e Este esta inserido no browser em “certificados pessoais”).
Importei o certificado da SEFAZ RS (com extensao .cer) - “em certificados do tipo SERVIDORES”.
depois utilizei uma classe pega na internet para instalar o certifido - (Installcert.java)
compilei esta classe InstalCert pela linha de comando (DOS). Depois digitei o seguinte comando:
java Installcert
Ai sim, gerou um arquivo chamado jssecacerts.
Ufaa…rsrs
Porém, quando fui compilar a classe main para ver o retorno do status do servico, apareceu uma excessao que não consigo detectar o bendito erro…heehee
vou postar o código para ficar mais claro como fiz esse bendito programa - XD
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package webservice;
import br.inf.portalfiscal.nfe.wsdl.nfestatusservico.NfeStatusServico;
import br.inf.portalfiscal.nfe.wsdl.nfestatusservico.NfeStatusServicoSoap;
import java.security.Security;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String nfeCabecMsg =
“<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>”
+ "<cabecMsg xmlns=“http://www.portalfiscal.inf.br/nfe” "
+ “versao=“1.02”>” + “1.07”
+ “”;
String nfeDadosMsg =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<consStatServ " + " versao=\"1.07\""
+ " xmlns=\"http://www.portalfiscal.inf.br/nfe\">"
+ "<tpAmb>2</tpAmb>" + "<cUF>53</cUF>"
+ "<xServ>STATUS</xServ>" + "</consStatServ>";
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "D:\\thiago\\dzyon.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "senhadocertificado");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "D:\\thiago\\jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
NfeStatusServico service = new NfeStatusServico();
try {
NfeStatusServicoSoap nfeStatus = service.getNfeStatusServicoSoap();
System.out.println(nfeStatus.nfeStatusServicoNF(nfeCabecMsg,
nfeDadosMsg));
} catch (Throwable e1) {
e1.printStackTrace();
}
}
}[/code]
Agora posto a excessao gerada: =/
compile-single:
run-single:
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:117)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:194)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:122)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:95)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:308)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:146)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)
at $Proxy28.nfeStatusServicoNF(Unknown Source)
at webservice.Main.main(Main.java:50)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1868)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1337)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087)
at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getOutputStream(HttpsURLConnectionOldImpl.java:220)
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:105)
... 14 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319)
... 26 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 32 more
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)
[b][i]
Esqueci de fazer algo, é algum problema na hora de cadastrar o certificado tanto do cliente quanto do servidor da SEFAZ RS?
Preciso mto fazer isso rodar, pois to desenvolvendo ou tentando desenvolver um modulo pra carta de correção pra NFE aki na empresa que trabalho…(que choração)…kkkk
Qualquer sujestão agradeço.
[/i][/b]