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
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.
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]/*
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:
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