Nota fiscal eletronica em java

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>