Autor |
Mensagem |
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 28/04/2015 17:54:36
|
lucianohdr
JavaC Membro
![[Avatar]](/jc/images/avatar/e97ee2054defb209c35fe4dc94599061.jpg)
Membro desde: 26/12/2012 16:34:43
Mensagens: 45
Localização: Francisco Beltrão - Paraná
Offline
|
Boa tarde pessoal.
Preciso de uma ajuda em um problema "cabeludo".
No nosso sistema, nós emitimos uma nota através do seguinte método:
e antes de essa conexão acontecer é setada as propriedades no sistema através do seguinte método:
Tudo estava funcionando perfeitamente. Até surgir a necessidade de se receber e enviar emails para fornecedores. No caso do Recebimento, temos o seguinte método:
o store que é devolvido pelo método conectar é tratado no seguinte método:
As mensagens contidas no objeto folder são tratadas depois no método processMail():
Logo depois de ser implementado e entrar em funcionamento esta parte de recebimento de emails, o envio das NFes começou a retornar um erro:
ou seja, o erro é bem claro : "unable to find valid certification path to requested target"
Por algum motivo o caminho do certificado nao é mais encontrado. Porém o método setPropertiesA1() é chamado toda vez que uma NFe vai ser emitida.
Alguém que entenda bem como essas conexões funcionam, poderia dar um luz do porque o sistema nao consegue mais setar a propriedade "javax.net.ssl.keyStore"?
Ou alguma dica do que pode ser feito.
Desde já agradeço a atenção
|
lucianohdr é legal. Mas Luciano fica bem melhor  |
|
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 14:25:46
|
GGarcia
JavaC Membro
![[Avatar]](/jc/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 28/05/2013 17:12:21
Mensagens: 332
Offline
|
Isso é um pouco chato de resolver, mas tem solução.
O problema é justamente o seu método de setPropertiesA1, pois ele seta as variáveis em ambiente de sistema. O recebimento de e-mail faz a mesma coisa. Se ambos ocorrem simultaneamente ou um escreve uma variável de ambiente e o outro não, ocorre o conflito.
Isso também pode acontecer em situações onde mais de uma nota está sendo enviada simultaneamente por dois usuários distintos.
Para resolver o problema de notas simultâneas, utilizei um socket factory para que cada tentativa de envio da NFe/NFCe ter sua sessão própria e não interferir com chamadas concorrentes ou que utilizem as mesmas propriedades. Esse sistema deve resolver para você também.
Eu faço isso sempre que envio uma nota:
A classe SocketFactoryNFe segue abaixo:
Precisa informar o X509Certificate (que é seu certificado) e onde se encontra o arquivo de Cacerts para poder gerar a KeyStore.
Espero que isso te ajude.
Esta mensagem foi editada 2 vezes. Última atualização foi em 29/04/2015 14:32:41
|
If you're here, who's running hell? |
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 15:25:28
|
lucianohdr
JavaC Membro
![[Avatar]](/jc/images/avatar/e97ee2054defb209c35fe4dc94599061.jpg)
Membro desde: 26/12/2012 16:34:43
Mensagens: 45
Localização: Francisco Beltrão - Paraná
Offline
|
cara, muito obrigado pela atenção.
Seguinte, ainda acho que seja um problema diferente do que você se refere. Aqui vai umas considerações:
- o recebimento de email acontece logo que a aplicação é inicializada ( a propósito, nós usamos jboss 7) e outras requisições ao email são feitas de tempo em tempo.
Um teste que eu fiz, foi aumentar o tempo entre as consultas ao email, pra tipo 1 hora (antes era 1 minuto ). E logo depois que a aplicação inicializa eu vejo no log que fez a conexão com o gmail, e faço o teste da nota.
Não importa o tempo que eu fizer o envio da nota, da sempre erro, ou seja, as conexões de email e nota são simultaneas;
- outra coisa foi que eu chequei todas as propriedades setadas no ambiente de sistema fazendo o seguinte:
que me retorna a chave e o valor, fiz isso antes e depois da primeira conexão com o gmail, e não mudou nenhuma das 95 propriedades ( sim eu chequei todas ).
As únicas propriedades que mudam são aquelas que eu adiciono ao enviar a nota.
Mas enfim, pra desencargo de consciência vou usar teu código pra fazer um teste.
Se der certo aviso.
Obrigado de novo
|
lucianohdr é legal. Mas Luciano fica bem melhor  |
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 15:43:07
|
GGarcia
JavaC Membro
![[Avatar]](/jc/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 28/05/2013 17:12:21
Mensagens: 332
Offline
|
Eu tive todo o tipo de erros estranhos/sem explicação antes de implementar a solução que coloquei acima.
Espero realmente que isso funcione para você também. Se não der certo, avise que dou uma analisada de novo.
Abraço
|
If you're here, who's running hell? |
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 16:23:54
|
lucianohdr
JavaC Membro
![[Avatar]](/jc/images/avatar/e97ee2054defb209c35fe4dc94599061.jpg)
Membro desde: 26/12/2012 16:34:43
Mensagens: 45
Localização: Francisco Beltrão - Paraná
Offline
|
Só mais algumas perguntas GGarcia.
Onde você usa o objeto Protocol?
É só eu registrar esse protocolo e fazer a conexão normalmente?
Obrigado
|
lucianohdr é legal. Mas Luciano fica bem melhor  |
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 16:49:24
|
GGarcia
JavaC Membro
![[Avatar]](/jc/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 28/05/2013 17:12:21
Mensagens: 332
Offline
|
Exato, apenas registre o protocolo e use normalmente.
Quando utiliza
está sendo criado um novo protocolo utilizando as definições criadas no SocketFactoryNFe.
E esse trecho acima registra o protocolo no sistema para uso.
Esqueci de mencionar que esse Protocol é parte do Apache Commons httpclient. Usei a versão 3.2.
|
If you're here, who's running hell? |
|
|
![[Post New]](/jc/templates/javac/images/icon_minipost_new.gif) 29/04/2015 18:55:02
|
lucianohdr
JavaC Membro
![[Avatar]](/jc/images/avatar/e97ee2054defb209c35fe4dc94599061.jpg)
Membro desde: 26/12/2012 16:34:43
Mensagens: 45
Localização: Francisco Beltrão - Paraná
Offline
|
Então cara.
Não funcionou ainda.
Me veio uma pergunta enquanto testa com teu código.
Por acaso esse Protocol da apache não é pra ser usado somente onde é usada
Axis?
Eu acho que o objeto SOAPConnection que eu uso pra conectar não enxerga esse Protocol e as configurações dele;
|
lucianohdr é legal. Mas Luciano fica bem melhor  |
|
|
|
|