tenho o certificado a1, e setei ele certinho, com senha e tudo… vou postar o codigo aqui para ver se tem algo errado…
desde já muito obrigado fredferrao
tenho o certificado a1, e setei ele certinho, com senha e tudo… vou postar o codigo aqui para ver se tem algo errado…
desde já muito obrigado fredferrao
então lembrando que eu utilizei o CXF para gerar as classes es os pacotes…
a partir do webService, será que fiz algo errado???
Segue método que setava os certificados antes de fazer a chamada aos webservices da NFe, isto foi na época que implementei a NFe no Freedom ERP. Servia tanto pra A1 como A3, arquivo ou o token, no caso funcionava para os smart card do SERASA.
private void setSecurity(boolean token) {
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", parametros.getProperty("nfe.certificado.keystore")); //aqui é o caminho para o teu keystore
System.setProperty("javax.net.ssl.trustStorePassword", "senha"); //senha do keystore
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
if (token) {//se for token
Provider p = new sun.security.pkcs11.SunPKCS11("c:\opt\freedom\nfe\certificados\token.cfg"); //este arquivo é necessário quando é token, tem o conteudo dele nos outros topicos de NFe aqui do gug
Security.addProvider(p);
System.setProperty("javax.net.ssl.keyStoreType", parametros.getProperty("nfe.certificado.tipo")); //PKCS12 ou PKCS11, aqui é A3, token
System.setProperty("javax.net.ssl.keyStore", "NONE");
System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SmartCard");
System.setProperty("javax.net.ssl.keyStorePassword", parametros.getProperty("nfe.certificado.pass")); //senha do token
} else {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", parametros.getProperty("nfe.certificado.tipo")); //pkcs11, agora vi q poderia ter fica fora do if, pois pega do arquivo :P refactoring...
System.setProperty("javax.net.ssl.keyStore", parametros.getProperty("nfe.certificado.pfx")); //aqui é o teu certificado A1
System.setProperty("javax.net.ssl.keyStorePassword", parametros.getProperty("nfe.certificado.pass")); //senha do certificado
}
}
então eu segui alguns post que achei no JAVAC
que foram esses…
NF-e: Consulta Cadastro Utilizando Certificado A1 http://www.javac.com.br/jc/posts/list/124-nfe-consulta-cadastro-utilizando-certificado-a1.page
NF-e: Consulta da NF-e - WebService 2.0 http://www.javac.com.br/jc/posts/list/16-nfe-consulta-da-nfe-webservice-20.page
e os dois rodaram certinho creio que não seja problema no certificado…
a ideia do trabalho que estou desenvolvendo é fazer um consulta igual é feita em http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=
tanto a consulta resumida como a consulta inteira
a ideia é fazer um sistema desktop e se comunica com o webservice e mostrar os resultados na tela…
Essa é a classe… alguém para ajudar?
package br.inf.portalfiscal.nfe.wsdl.nfedownloadnf;
* Please modify this class to meet your needs
import java.io.File;
/**
* This class was generated by Apache CXF 2.7.4
* 2013-04-16T17:44:25.758-03:00
* Generated source version: 2.7.4
*
*/
public final class NfeDownloadNFSoap_NfeDownloadNFSoap12_Client {
private static final QName SERVICE_NAME = new QName("http://www.portalfiscal.inf.br/nfe/wsdl/NfeDownloadNF", "NfeDownloadNF");
private NfeDownloadNFSoap_NfeDownloadNFSoap12_Client() {
}
public static void main(String args[]) throws java.lang.Exception {
URL wsdlURL = NfeDownloadNF.WSDL_LOCATION;
if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
File wsdlFile = new File(args[0]);
try {
if (wsdlFile.exists()) {
wsdlURL = wsdlFile.toURI().toURL();
} else {
wsdlURL = new URL(args[0]);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
NfeDownloadNF ss = new NfeDownloadNF(wsdlURL, SERVICE_NAME);
NfeDownloadNFSoap port = ss.getNfeDownloadNFSoap12();
{
System.out.println("Invoking nfeDownloadNF...");
br.inf.portalfiscal.nfe.wsdl.nfedownloadnf.NfeDadosMsg _nfeDownloadNF_nfeDadosMsg = new br.inf.portalfiscal.nfe.wsdl.nfedownloadnf.NfeDadosMsg();
java.util.List<java.lang.Object> _nfeDownloadNF_nfeDadosMsgContent = new java.util.ArrayList<java.lang.Object>();
java.lang.Object _nfeDownloadNF_nfeDadosMsgContentVal1 = null;
_nfeDownloadNF_nfeDadosMsgContent.add(_nfeDownloadNF_nfeDadosMsgContentVal1);
_nfeDownloadNF_nfeDadosMsg.getContent().addAll(_nfeDownloadNF_nfeDadosMsgContent);
br.inf.portalfiscal.nfe.wsdl.nfedownloadnf.NfeDownloadNFResult _nfeDownloadNF__return = port.nfeDownloadNF(_nfeDownloadNF_nfeDadosMsg);
System.out.println("nfeDownloadNF.result=" + _nfeDownloadNF__return);
}
System.exit(0);
}
}
Sugiro que volte a minha primeira resposta, o erro é claro que o problema é com certificado, vc insiste que esta tudo correto com keystore e tudo mais, mas o stacktrace é claro em dizer que algo nao esta certo:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Use o keytool e de um list para ver os servificados que tem dentro do seu keystore, bem como suas validades e etc.
Não sei como vc fez, mas vc tem que entrar neste caminho pelo navegador: https://www.nfe.fazenda.gov.br/NFeConsultaDest/NFeConsultaDest.asmx?wsdl, exportar o certificado da receita, e entao importar para o teu keystore usando o keytool
valeu fredferrao vou ver aqui, esse procedimento que vc está falando…
kkkkkkkk
sou leigo nisso então vou refazer isso… Obrigado!
como isso?
eu fiz a parte de que vc falou de gerar o nfe.keystore
Entra neste site com teu navegador: https://www.nfe.fazenda.gov.br/NFeConsultaDest/NFeConsultaDest.asmx?wsdl
Se teu certificado nao estiver instalado nem entrar tu vai conseguir.
Feito isto pelo navegador vc vai nas opções de certificados(Firefox no linux: preferencias > avançado > criptografia > servidores) encontra la no certificado da receita e manda exporta-lo.
De posse do certificado da receita vc usa o keytool para importa-lo no teu keystore, como no exemplo abaixo que peguei aqui mesmo no guj
keytool -importcert -trustcacerts -alias nfe -file CertificadoDaReceita.cer -keystore teuKeyStore.jks
fredferrao obrigado pela ajuda agora tenho certeza que consegui fazer essa parte a qual vc me falou, utilizei esse post aqui para isso… http://www.guj.com.br/java/235046-nfe-v2—tutorial-1
mas continuo tendo o erro ainda, não sei mais o que fazer… :x
desde de já muito obrigado!
Vc postou uma classe ali em cima, tudo que vc faz esta ali? Onde vc esta setando a segurança para a conexao? Os código que postei acima.
bem vou ver se estou no caminho certo, isso aqui é tudo novo para mim!
primeiro de tudo instalei o certificado…
ai logo depois eu entrei no site onde fica as url dos web service, ai fiz aquele esquema de salva .wsdl
instalei aqueles 3 certificados e gerei o nfe.keystore
logo depois joguei no eclipse com o botão direito web services> Generate Client ai rodo ele com o JAXB ele criar uma pacote com umas classes sozinho…
ai eu tento rodar aquelas duas classes e da aquele erro…
Galera estou enviando Nfe Download e está me devolvendo essa msg, alguém pode me ajudar???
Message enviada
com.sun.xml.internal.messaging.saaj.soap.ver1_2.Message1_2Impl@5fda3acc
in :
<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Header><nfeCabecMsg xmlns="https://www.sefazvirtual.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"><versaoDados>2.00</versaoDados><cUF>35</cUF></nfeCabecMsg></soap12:Header><soap12:Body><nfeDadosMsg xmlns="https://www.sefazvirtual.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"><downloadNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>1</tpAmb><cUF>35</cUF><xServ>DOWNLOAD NFE</xServ><CNPJ>(numero do CNPJ)</CNPJ><chNFe>(Numero da chave de acesso)</chNFe></downloadNFe></nfeDadosMsg></soap12:Body></soap12:Envelope>
out :
<?xml
version="1.0"
encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Sender</soap:Value></soap:Code><soap:Reason><soap:Text
xml:lang="en">System.Web.Services.Protocols.SoapException:
Unable
to
handle
request
without
a
valid
action
parameter.
Please
supply
a
valid
soap
action.
at
System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
at
System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at
System.Web.Services.Protocols.ServerProtocol.SetContext(Type
type,
HttpContext
context,
HttpRequest
request,
HttpResponse
response)
at
System.Web.Services.Protocols.ServerProtocolFactory.Create(Type
type,
HttpContext
context,
HttpRequest
request,
HttpResponse
response,
Boolean&
abortProcessing)</soap:Text></soap:Reason><soap:Detail
/></soap:Fault></soap:Body></soap:Envelope>
o problema do anterior eu consegui resolver era url trocada…
agora estou tendo outro erro:
Message enviada
com.sun.xml.internal.messaging.saaj.soap.ver1_2.Message1_2Impl@5fda3acc
in :
<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Header><nfeCabecMsg xmlns="https://www.sefazvirtual.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"><versaoDados>2.00</versaoDados><cUF>35</cUF></nfeCabecMsg></soap12:Header><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeDownloadNF"><downloadNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><cUF>35</cUF><xServ>DOWNLOAD NFE</xServ><CNPJ>*********************</CNPJ><chNFe>***************************</chNFe></downloadNFe></nfeDadosMsg></soap12:Body></soap12:Envelope>
out :
<?xml
version="1.0"
encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><nfeDownloadNFResult
xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeDownloadNF"><retDownloadNFe
versao="1.00"
xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>AN_1.0.0</verAplic><cStat>242</cStat><xMotivo>Rejeicao:
Elemento
nfeCabecMsg
inexistente
no
SOAP
Header</xMotivo><dhResp>2013-04-23T14:43:20</dhResp></retDownloadNFe></nfeDownloadNFResult></soap:Body></soap:Envelope>