Login Registre-se
Conflito entre javax.mail e javax.xml.soap.SOAPConnection ( para o envio de NFe )  XML
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Autor Mensagem
lucianohdr

JavaC Membro
[Avatar]

Membro desde: 26/12/2012 16:34:43
Mensagens: 42
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
GGarcia

JavaC Membro

Membro desde: 28/05/2013 17:12:21
Mensagens: 173
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?
lucianohdr

JavaC Membro
[Avatar]

Membro desde: 26/12/2012 16:34:43
Mensagens: 42
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
GGarcia

JavaC Membro

Membro desde: 28/05/2013 17:12:21
Mensagens: 173
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?
lucianohdr

JavaC Membro
[Avatar]

Membro desde: 26/12/2012 16:34:43
Mensagens: 42
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
GGarcia

JavaC Membro

Membro desde: 28/05/2013 17:12:21
Mensagens: 173
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?
lucianohdr

JavaC Membro
[Avatar]

Membro desde: 26/12/2012 16:34:43
Mensagens: 42
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
 
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Ir para:   
Powered by JForum 2.1.9 © JForum Team