Nfe - Nota Fiscal Eletronica

Boa tarde galera

alguem aqui ja fez transmissão de carta de correção ?
não encontrei ainda as wsdl para poder montar as classes para tratar essa situação no SEFAZ apenas encontro os endereços

salve Galera blz

ninguem ainda se atrevei a mexer com CCe , carta de correção ? está super divertido nd funciona kkkk mais entao está retornando do nosso queridissimo SEFAZ o seguinte rejeição

493 - Rejeição: Evento não atende o Schema XML específico

ja validei o xml de todas possiveis formas e está ok, o programa de envio da carta é praticamente uma copia do programa que faz envio da nf-e
está se esgotando minhas possibilidades de possiveis erros se alguem puder me ajudar com alguma luz fico agradecido

obrigado

Estou com alguns problemas ao tentar utilizar a classe GeradorWSDL postada nesse topico, estou usando o axis2 1.5.1 assim como outros usuarios citaram, mas nao funfa por nada.

public class GeradorWSDL{

    public static void main(String[] args) {
        String nfestatusservico = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL";
        GeradorWSDL gerador = new GeradorWSDL();
        gerador.setProperties();
        gerador.geraWSDL(nfestatusservico, "statusservico");
    }

    public void geraWSDL(String wsdl, String pack) {
        try {
            WSDL2Java.main(new String[]{"-o", "c:\\src", "-p", "br.com.nfe.ws." + pack, "-uri", wsdl});
//            WSDL2Java.main(new String[]{"-uri", wsdl, "-p", "br.com.nfe.ws." + pack});
            System.out.println("Gerado com sucesso.");
        } catch (Exception ex) {
            Logger.getLogger(Autogeracao.class.getName()).log(Level.SEVERE, "Erro ao gerar.", ex);
        }
    }

    public void setProperties() {
        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", "jssecacerts");
        System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
        System.setProperty("javax.net.ssl.keyStore", "C:\\cliente.pfx");
        System.setProperty("javax.net.ssl.keyStorePassword", "lpsx46");
    }
}

Ao executar recebo o seguinte erro:

Retrieving document at ‘https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL’.
log4j:WARN No appenders could be found for logger (org.apache.axis2.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
21/09/2011 13:14:54 br.com.nfe.ws.GeradorWSDL geraWSDL
GRAVE: *** Erro com a geração ***
org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.(CodeGenerationEngine.java:156)
at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
at br.com.jcomputacao.nfe.ws.Autogeracao.geraWSDL(GeradorWSDL.java:82)
at br.com.jcomputacao.nfe.ws.Autogeracao.main(GeradorWSDL.java:72)
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=OTHER_ERROR: Unable to resolve imported document at ‘https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL’.: java.io.IOException: Server returned HTTP response code: 403 for URL: https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.readInTheWSDLFile(CodeGenerationEngine.java:288)
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.(CodeGenerationEngine.java:111)
… 4 more
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getInputStream(HttpsURLConnectionOldImpl.java:204)
at java.net.URL.openStream(URL.java:1010)
at com.ibm.wsdl.util.StringUtils.getContentAsInputStream(Unknown Source)
… 8 more

Você deve usar um certificado válido para acesso ao wsdl:

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=OTHER_ERROR: Unable to resolve imported document at ‘https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL’.: java.io.IOException: Server returned HTTP response code: 403 for URL: https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/s...es/NfeStatusServico2.asmx?WSDL

Sem certificado, o retorno é:

Meu certificado é valido sim, acessando pelo internet explorer funciona OK.
Meu problema é pelo java.

[quote=philler]Você deve usar um certificado válido para acesso ao wsdl:

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=OTHER_ERROR: Unable to resolve imported document at ‘https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL’.: java.io.IOException: Server returned HTTP response code: 403 for URL: https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/s...es/NfeStatusServico2.asmx?WSDL

Sem certificado, o retorno é:

[/quote]

[quote=jeanpablojp]Meu certificado é valido sim, acessando pelo internet explorer funciona OK.
Meu problema é pelo java.
[/quote]

E como está seu código na parte de autenticação?
Que tipo de certificado é? A3 ou A1? O acesso via java é um pouco diferente e mais exigente que acesso via navegador.

Alencar

[quote=philler][quote=jeanpablojp]Meu certificado é valido sim, acessando pelo internet explorer funciona OK.
Meu problema é pelo java.
[/quote]

E como está seu código na parte de autenticação?
Que tipo de certificado é? A3 ou A1? O acesso via java é um pouco diferente e mais exigente que acesso via navegador.

Alencar[/quote]

Vamos la, codigo do GeradorWSDL usando axis2 1.5.1:

[code]
public class GeradorWSDL{

public static void main(String[] args) {   
    System.setProperty("nfe.certificado.senha", "senhacertificado");
    System.setProperty("nfe.certificado.caminho", "C:\\meucertificado.pfx");

    System.setProperty("nfe.certificadoSefaz.caminho", "jssecacerts");
    System.setProperty("nfe.certificadoSefaz.senha", "changeit");

    System.setProperty("nfe.certificado.tipo", "A1");
    System.setProperty("nfe.ambiente", "2");//Homologacao

    String nfestatusservico = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx?WSDL";   
    GeradorWSDL gerador = new GeradorWSDL();   
    WsConnectionConfig.setProperties();
    gerador.geraWSDL(nfestatusservico, "statusservico");   
}   

public void geraWSDL(String wsdl, String pack) {   
    try {   
        WSDL2Java.main(new String[]{"-o", "c:\\src", "-p", "br.com.nfe.ws." + pack, "-uri", wsdl});   

// WSDL2Java.main(new String[]{"-uri", wsdl, “-p”, “br.com.nfe.ws.” + pack});
System.out.println(“Gerado com sucesso.”);
} catch (Exception ex) {
Logger.getLogger(GeradorWSDL.class.getName()).log(Level.SEVERE, “Erro ao gerar.”, ex);
}
}
} [/code]

Minha classe que seta as propriedades:

public class WsConnectionConfig {

    public static void setProperties() {
        boolean useProxy = Boolean.parseBoolean(System.getProperty("useProxy", "false"));
        if (useProxy) {
            configuraProxy();
        }
        System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
        configuraA1();
        String certpath = System.getProperty("nfe.certificadoSefaz.caminho");
        File file = null;
        if (certpath.startsWith("file://")) {
            String urlFile = null;
            try {
                urlFile = new URL(certpath).getFile();
            } catch (MalformedURLException ex) {
                Logger.getLogger(WsConnectionConfig.class.getName()).log(Level.SEVERE, null, ex);
            }
            file = new File(urlFile);
        } else {
            file = new File(certpath);
        }

        if (!file.exists()) {
            try {
                String[] hosts = new String[]{"www.portalfiscal.inf.br"};
                InstallCert.installHostCertificate(false, file, hosts);
                hosts = new String[]{"www.portalfiscal.inf.br"};
                InstallCert.installHostCertificate(false, file, hosts);
                hosts = new String[]{"homologacao.nfe.fazenda.sp.gov.br"};
                InstallCert.installHostCertificate(false, file, hosts);
                hosts = new String[]{"homologacao.nfe.fazenda.sp.gov.br"};
                InstallCert.installHostCertificate(false, file, hosts);
                hosts = new String[]{"nfe.fazenda.sp.gov.br"};
                InstallCert.installHostCertificate(false, file, hosts);
                hosts = new String[]{"nfe.fazenda.sp.gov.br"};
                InstallCert.installHostCertificate(false, file, hosts);
            } catch (Exception ex) {
                Logger.getLogger(WsConnectionConfig.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", certpath);
        System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    }

    private static void configuraProxy() {
        Options options = new Options();
        HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
        String aux = System.getProperty("http.proxyUser");
        auth.setUsername(aux);
        aux = System.getProperty("http.proxyPassword");
        auth.setPassword(aux);
        // set if realm or domain is known
        options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
        HttpTransportProperties.ProxyProperties proxyProperties = new HttpTransportProperties.ProxyProperties();
        aux = System.getProperty("http.proxyHost");
        proxyProperties.setProxyName(aux);
        int porta = Integer.parseInt(System.getProperty("http.proxyPort", "3128"));
        proxyProperties.setProxyPort(porta);
        options.setProperty(org.apache.axis2.transport.http.HTTPConstants.PROXY, proxyProperties);
        options.setProperty(org.apache.axis2.context.MessageContextConstants.HTTP_PROTOCOL_VERSION, org.apache.axis2.transport.http.HTTPConstants.HEADER_PROTOCOL_11);
    }

    private static void configuraA1() {
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        String certpath = System.getProperty("nfe.certificado.caminho");
        File file = new File(certpath);
        if (!file.exists()) {
            file = new File(file.getName());
            certpath = file.getAbsolutePath();
            if (!file.exists()) {
                if (System.getProperty("nfe.certificado.caminho").startsWith("http")) {
                    try {
                        URL url = new URL(System.getProperty("nfe.certificado.caminho"));
                        InputStream is = url.openStream();
                        FileOutputStream fos = new FileOutputStream(file);
                        int obyte = -1;
                        while ((obyte = is.read()) != -1) {
                            fos.write(obyte);
                        }
                        fos.flush();
                        fos.close();
                        is.close();
                    } catch (IOException ex) {
                        Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, "Erro ao obter o cerficiado", ex);
                    }
                }
            }
        }
        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
        System.setProperty("javax.net.ssl.keyStore", certpath);
        System.setProperty("javax.net.ssl.keyStorePassword", System.getProperty("nfe.certificado.senha"));
    }
}

E minha classe de instalar o certificado:

public class InstallCert {

    public static void installHostCertificate(boolean prompt, File file, String[] args) throws Exception {
	String host;
	int port;
	char[] passphrase;
	if ((args.length == 1) || (args.length == 2)) {
	    String[] c = args[0].split(":");
	    host = c[0];
	    port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
	    String p = (args.length == 1) ? "changeit" : args[1];
	    passphrase = p.toCharArray();
	} else {
	    System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");
	    return;
	}

        File ifile = new File("jssecacerts");
        if (ifile.isFile() == false) {
	    char SEP = File.separatorChar;
	    File dir = new File(System.getProperty("java.home") + SEP
		    + "lib" + SEP + "security");
	    ifile = new File(dir, "jssecacerts");
	    if (ifile.isFile() == false) {
		ifile = new File(dir, "cacerts");
	    }
	}
        System.out.println("Loading KeyStore " + ifile + "...");
	InputStream in = new FileInputStream(ifile);
	KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
	ks.load(in, passphrase);
	in.close();

	SSLContext context = SSLContext.getInstance("TLS");
	TrustManagerFactory tmf =
	    TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
	tmf.init(ks);
	X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
	SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
	context.init(null, new TrustManager[] {tm}, null);
	SSLSocketFactory factory = context.getSocketFactory();

	System.out.println("Opening connection to " + host + ":" + port + "...");
	SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
	socket.setSoTimeout(10000);
	try {
	    System.out.println("Starting SSL handshake...");
	    socket.startHandshake();
	    socket.close();
	    System.out.println();
	    System.out.println("No errors, certificate is already trusted");
	} catch (SSLException e) {
	    System.out.println();
	    e.printStackTrace(System.out);
	}

	X509Certificate[] chain = tm.chain;
	if (chain == null) {
	    System.out.println("Could not obtain server certificate chain");
	    return;
	}

	BufferedReader reader =
		new BufferedReader(new InputStreamReader(System.in));

	System.out.println();
	System.out.println("Server sent " + chain.length + " certificate(s):");
	System.out.println();
	MessageDigest sha1 = MessageDigest.getInstance("SHA1");
	MessageDigest md5 = MessageDigest.getInstance("MD5");
	for (int i = 0; i < chain.length; i++) {
	    X509Certificate cert = chain[i];
	    System.out.println
	    	(" " + (i + 1) + " Subject " + cert.getSubjectDN());
	    System.out.println("   Issuer  " + cert.getIssuerDN());
	    sha1.update(cert.getEncoded());
	    System.out.println("   sha1    " + toHexString(sha1.digest()));
	    md5.update(cert.getEncoded());
	    System.out.println("   md5     " + toHexString(md5.digest()));
	    System.out.println();
	}

        int k = 0;
        if (prompt) {
            System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");

            String line = reader.readLine().trim();
            try {
                k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
            } catch (NumberFormatException e) {
                System.out.println("KeyStore not changed");
                return;
            }
        }
	
	X509Certificate cert = chain[k];
	String alias = host + "-" + (k + 1);
	ks.setCertificateEntry(alias, cert);

	OutputStream out = new FileOutputStream(file);
	ks.store(out, passphrase);
	out.close();

	System.out.println();
	System.out.println(cert);
	System.out.println();
	System.out.println
		("Added certificate to keystore 'jssecacerts' using alias '"
		+ alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
	StringBuilder sb = new StringBuilder(bytes.length * 3);
	for (int b : bytes) {
	    b &= 0xff;
	    sb.append(HEXDIGITS[b >> 4]);
	    sb.append(HEXDIGITS[b & 15]);
	    sb.append(' ');
	}
	return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

	private final X509TrustManager tm;
	private X509Certificate[] chain;

	SavingTrustManager(X509TrustManager tm) {
	    this.tm = tm;
	}

        @Override
	public X509Certificate[] getAcceptedIssuers() {
	    throw new UnsupportedOperationException();
	}

        @Override
	public void checkClientTrusted(X509Certificate[] chain, String authType)
		throws CertificateException {
	    throw new UnsupportedOperationException();
	}

        @Override
	public void checkServerTrusted(X509Certificate[] chain, String authType)
		throws CertificateException {
	    this.chain = chain;
	    tm.checkServerTrusted(chain, authType);
	}
    }
}

Já revirei esse codigo e não consigo achar o erro, creio que seja em algo com relação ao certificado mesmo, mas já não sei mais o que tentar.

1 curtida

O certificado, pelo que eu entendi, é um A1, certo?
Verifique se o tamanho do .pfx está com 7KB. Muitos dos erros de conexão é porque o .pfx está com 3KB.
Isso quer dizer que a cadeia certificadora do teu certificado não está presente no arquivo .pfx.

Para resolver isso, importe ele no IE e, através das opções, exporte novamente marcando a inclusão
de toda a cadeia. Deve gerar um arquivo de 7KB.

Alencar

*jeanpablojp
Cara se vc quer apenas gerar uma wsdl para montar um webservice , eu faço da seguinte maneira
Pega o endereço do serviço no site do sefaz cola o endereço na url do browser
E acrescenta no final do endereco ?wsdl vai carregar na tela um xml salva esse xml q apareceu com a extensão .wsdl
Ai está pronto para gerar as classes de serviços

Flw

[quote=philler]O certificado, pelo que eu entendi, é um A1, certo?
Verifique se o tamanho do .pfx está com 7KB. Muitos dos erros de conexão é porque o .pfx está com 3KB.
Isso quer dizer que a cadeia certificadora do teu certificado não está presente no arquivo .pfx.

Para resolver isso, importe ele no IE e, através das opções, exporte novamente marcando a inclusão
de toda a cadeia. Deve gerar um arquivo de 7KB.

Alencar[/quote]

Muito obrigado mesmo.
Funcionou blz agora.

Bom Dia

Alguem sabe onde posso encontrar os Schemas da nfe 2.0

[quote=danielpump]Bom Dia!

Alguem poderia me passar os Schemas da NFe 2.0 por favor, procurei na internet e não encontrei. Se alguem puder me passar o link para download ou os arquivos mesmo.^^

[/quote]

ta na mão.

http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=/fwLvLUSmU8=

Vlw mesmo aix^^

tinha olhado na busca, mas nem olhei nos links mesmo do site^^ VLW

Alguém do RS sabe sobre o Registro de Saída que consta no Ajuste SINIEF 8 de 30/09/2011 e entra
em vigor em 01/01/2012?
Consta no Ajuste que o layout estaria no “Manual de Integração - Contribuinte”, conforme o texto:

ALencar

Pessoal, estou com problemas no uso do Token ACS CryptoMate.
Pelo Admin Tool consigo ver o certificado do cliente assim como sua chave privada.
Mas, via java ou keytool, gera o seguinte erro:

[quote]Erro extraindo privateKey do token: java.security.KeyStoreException: invalid Key
Store state: found 9 private keys sharing CKA_ID dd048052-aee7-4abe-8ae9-5cd9b3e
2e550
java.security.ProviderException: java.security.KeyStoreException: invalid KeySto
re state: found 9 private keys sharing CKA_ID dd048052-aee7-4abe-8ae9-5cd9b3e2e5
50
at sun.security.pkcs11.P11KeyStore.engineGetKey(P11KeyStore.java:319)
at java.security.KeyStore.getKey(Unknown Source)
at br.com.philler.util.Utils.getPrivateKeyFromToken(Unknown Source)
at br.com.philler.util.Utils.getAssinaturaXML(Unknown Source)
at br.com.philler.main.AssinarXML.assinar(Unknown Source)
at br.com.philler.main.Principal.main(Unknown Source)
Caused by: java.security.KeyStoreException: invalid KeyStore state: found 9 priv
ate keys sharing CKA_ID dd048052-aee7-4abe-8ae9-5cd9b3e2e550
at sun.security.pkcs11.P11KeyStore.getTokenObject(P11KeyStore.java:2330)

    at sun.security.pkcs11.P11KeyStore.engineGetKey(P11KeyStore.java:297)
    ... 5 more

[/quote]

O mesmo erro tentando alterar o alias pelo keytool:

[quote]C:\PROGRA~1\Java\jre6\bin>keytool.exe -changealias -keystore NONE -storetype PKC
S11 -storepass 11111111 -alias “NOME DO CLIENTE:1111111111” -destalias
1111111111
erro de keytool: java.security.KeyStoreException: invalid KeyStore state: found
9 private keys sharing CKA_ID dd048052-aee7-4abe-8ae9-5cd9b3e2e550
[/quote]

Este hardware é relativamente novo no mercado brasileiro e com isso, pouca informação na net.
Temos algum colega que já tenha passado por isso e resolveu a questão?

Obrigado pela atenção.

Alencar

Colegas de luta, alguma dica sobe este infeliz token da ACS?

Alencar

Pessoal, estou obtendo o seguinte erro tentando consultar status do serviço da NFe do RS:

log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAXUtils). log4j:WARN Please initialize the log4j system properly. org.apache.axis2.AxisFault: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203) at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76) at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400) at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at br.inf.portalfiscal.www.nfe.wsdl.nfestatusservico2.NfeStatusServico2Stub.nfeStatusServicoNF2(NfeStatusServico2Stub.java:196) at Classes.NfeConsultaStatusServicoA3.main(NfeConsultaStatusServicoA3.java:121) Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179) at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:186) 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 org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:116) at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:130) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:560) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199) ... 9 more Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) at java.security.Provider$Service.newInstance(Provider.java:1245) at sun.security.jca.GetInstance.getInstance(GetInstance.java:220) at sun.security.jca.GetInstance.getInstance(GetInstance.java:147) at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125) at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68) at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102) 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 org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:112) ... 18 more Caused by: java.security.NoSuchProviderException: no such provider: SunPKCS11-SmartCard at sun.security.jca.GetInstance.getService(GetInstance.java:66) at sun.security.jca.GetInstance.getInstance(GetInstance.java:190) at java.security.Security.getImpl(Security.java:662) at java.security.KeyStore.getInstance(KeyStore.java:632) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:145) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at java.security.Provider$Service.newInstance(Provider.java:1221)

Segue minha classe:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package Classes;
import java.net.URL;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;

import br.inf.portalfiscal.www.nfe.wsdl.nfestatusservico2.NfeStatusServico2Stub;
import java.io.InputStream;

/**
*

  • @author JavaC - Java Community
    */
    public class NfeConsultaStatusServicoA3 {

    public static void main(String[] args) {
    try {
    /**
    * 1) codigoDoEstado = Codigo do Estado conforme tabela IBGE.
    *
    * 2) url = Endereco do WebService para cada Estado.
    * Ver relacao dos enderecos em:
    * Para Homologacao: http://hom.nfe.fazenda.gov.br/PORTAL/WebServices.aspx
    * Para Producao: http://www.nfe.fazenda.gov.br/portal/WebServices.aspx
    *
    * 3) senhaDoCertificadoDoCliente = Senha do Certificado A3 do Cliente.
    *
    * 4) arquivoCacertsGeradoParaCadaEstado = Arquivo com os Certificados necessarios para
    * acessar o WebService. Pode ser gerado com a Classe NFeBuildCacerts.
    *
    * 5)Nesse programa você pode alterar o nome do eToken, esse é o nome que vai no name
    * (isso porque você ter vários eTokens com nomes diferentes, ex: eToken-MATRIZ).
    */
    String codigoDoEstado = “43”;
    URL url = new URL(“https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx”);
    String senhaDoCertificadoDoCliente = “XXX”;
    String arquivoCacertsGeradoParaCadaEstado = “C:/nfe2/NFeCacertsss”;

          /**
           * Tipo de Certificados.
           * A3CARTAO = A3 Cartão;
           * A3TOKEN = A3 Token;
           */
          String tipoCertificado = "A3CARTAO";
          //String tipoCertificado = "A3TOKEN";
    
          /**
           * Informacoes do Certificado Digital.
           */
          String fileCfg = "";
          if ("A3CARTAO".equals(tipoCertificado)) {
              fileCfg = "C:/nfe2/smartcard.cfg";
          }
          else if ("A3TOKEN".equals(tipoCertificado)) {
              fileCfg = "C:/nfe2/Token.cfg";
          }
          else {
              throw new Exception("Tipo de certificado inválido");
          }
          //forma 1 de criar o SunPKCS:
          //Provider p = new sun.security.pkcs11.SunPKCS11(ConfigServise.leitorSCR3310());
          //forma 2 de criar o SunPKCS:
          Provider p = new sun.security.pkcs11.SunPKCS11(fileCfg);
          Security.addProvider(p);
          char[] pin = senhaDoCertificadoDoCliente.toCharArray();
          KeyStore ks = KeyStore.getInstance("pkcs11", p);
          ks.load(null, pin);
    
          System.setProperty("javax.net.ssl.keyStore", "NONE");
          System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
    
          if ("A3CARTAO".equals(tipoCertificado)) {
              System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SmartCard");
          }
          else if ("A3TOKEN".equals(tipoCertificado)) {
              System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-eToken");
          }
    
          System.setProperty("javax.net.ssl.trustStoreType", "JKS");
          System.setProperty("javax.net.ssl.trustStore", arquivoCacertsGeradoParaCadaEstado);
    
          /**
           * Xml de Consulta.
           */
          StringBuilder xml = new StringBuilder();
          xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
              .append("<consStatServ versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
              .append("<tpAmb>2</tpAmb>")
              .append("<cUF>")
              .append(codigoDoEstado)
              .append("</cUF>")
              .append("<xServ>STATUS</xServ>")
              .append("</consStatServ>");
    
          OMElement ome = AXIOMUtil.stringToOM(xml.toString());
          NfeStatusServico2Stub.NfeDadosMsg dadosMsg = new NfeStatusServico2Stub.NfeDadosMsg();
          dadosMsg.setExtraElement(ome);
    
          NfeStatusServico2Stub.NfeCabecMsg nfeCabecMsg = new NfeStatusServico2Stub.NfeCabecMsg();
          /**
           * Codigo do Estado.
           */
          nfeCabecMsg.setCUF(codigoDoEstado);
    
          /**
           * Versao do XML
           */
          nfeCabecMsg.setVersaoDados("2.00");
          NfeStatusServico2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeStatusServico2Stub.NfeCabecMsgE();
          nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);
    
          NfeStatusServico2Stub stub = new NfeStatusServico2Stub(url.toString());
          NfeStatusServico2Stub.NfeStatusServicoNF2Result result = stub.nfeStatusServicoNF2(dadosMsg, nfeCabecMsgE);
    
          System.out.println(result.getExtraElement().toString());
      } catch (Exception e) {
          e.printStackTrace();
      }
    

    }

}
[/code]
Estou usando cartao safeweb serasa experian… Alguem pra me dar uma luz?

[quote=mateusviccari]… Caused by: java.security.NoSuchProviderException: no such provider: SunPKCS11-SmartCard

Segue minha classe:

[code]…
/**
* Informacoes do Certificado Digital.
*/
String fileCfg = “”;

—> AQUI
if (“A3CARTAO”.equals(tipoCertificado)) {
fileCfg = “C:/nfe2/smartcard.cfg”;
}
else if (“A3TOKEN”.equals(tipoCertificado)) {
fileCfg = “C:/nfe2/Token.cfg”;
}
else {
throw new Exception(“Tipo de certificado inválido”);
}
//forma 1 de criar o SunPKCS:
//Provider p = new sun.security.pkcs11.SunPKCS11(ConfigServise.leitorSCR3310());
//forma 2 de criar o SunPKCS:

—> AQUI 2
Provider p = new sun.security.pkcs11.SunPKCS11(fileCfg);
Security.addProvider§;
char[] pin = senhaDoCertificadoDoCliente.toCharArray();
KeyStore ks = KeyStore.getInstance(“pkcs11”, p);
ks.load(null, pin);

[/code][/quote]

A exceção gera no “AQUI 2”, provavemente pela má configuração em “AQUI 1”.
Verifique se o name e o path do cfg estão apontando para a dll correta.

Alencar

Não, pior que a dll ta setada certinha mesmo…
Eu tava usando o jdk 6, aí olhei o código dessa classe sunpkcs11 e vi que tinha muitos erros, achei estranho por isso baixei o jdk 7 e instalei, vi que ocorreram varias mudanças na classe e agora ela está sem acusar nenhum erro. Porém quando tento executar meu programa ele retorna a mesna mensagem de erro de antes.

[quote=mateusviccari]Não, pior que a dll ta setada certinha mesmo…
Eu tava usando o jdk 6, aí olhei o código dessa classe sunpkcs11 e vi que tinha muitos erros, achei estranho por isso baixei o jdk 7 e instalei, vi que ocorreram varias mudanças na classe e agora ela está sem acusar nenhum erro. Porém quando tento executar meu programa ele retorna a mesna mensagem de erro de antes.[/quote]

Perguntas:

  1. É token? Se sim, já acessou pelo próprio software dele? O PIN está correto?
  2. É Smartcard? Se sim, a leitora está ok? Se sim, já acessou pelo software do cartão? O PIN está correto?

Se você recém instalou o software do token/sc e não reiniciou o SO ainda, faça!
Se tudo acima está ok, parta para a debugação, verificando se o que está sendo ligo do cfg é realmente o que você precisa, se o PIN está certo o prg, etc…

Alencar