Pessoal, bom dia!
Estou com um problema na minha aplicação que recebe xml através do JavaMail.
A aplicação funciona por algum tempo, digamos até por um mes dependendo a conexão…
Se por acaso o LINK COM O SERVIDOR DE E-MAIL cair no momento em que está executando o método
getSubject() ou getCount()
A aplicação fica travada e não acontece nenhum exception…
Simplesmente trava, fica dias e eu tenho que encerrar a aplicação e executar novamente.
Para tentar amenizar o erro, tentei colocar um método para checar a conexão antes de utilizar estes métodos, mas parece que é a lei de murphy e não o LINK cai depois de alguns dias bem no momento que está executando o método.
if(conexaoServidorEMail()){
//Pegando o assunto da mensagem
this.subject = messages[i].getSubject();
}else{
break for1;
}
Alguém tem alguma idéia o que eu posso fazer ou substituir estes trechos?
//Acessando diretorio de entrada INBOX
if(getPastaCaixaEntrada(this.cxEntrada)){
//Verificando a quantidade de mensagens disponiveis na caixa postal
int qtdMsg = this.folder.getMessageCount();
//Se existir mensagens
if(qtdMsg > 0){
logger.info("====================================");
logger.info("Mensagem na Caixa Postal identificada");
logger.info("===================================");
//Filtrando as mensagens em um Array
this.messages = this.folder.getMessages();
//Faça enquanto existir mensagens
for1: for(int i=0; i < qtdMsg; i++){
//Numero da Mensagem
int numMsg = messages[i].getMessageNumber();
logger.info("> Mensagem Número: "+numMsg);
//Verificar novamente a conexão com o servidor de email devido o método não continuar
if(conexaoServidorEMail()){
//Pegando o assunto da mensagem
this.subject = messages[i].getSubject();
}else{
break for1;
}
//Listando o(s) remetentes da mensagem
this.sender = messages[i].getFrom();
for(Address addFrom : sender){
String from = addFrom.toString();
int ini = from.indexOf("<");
int fim = from.indexOf(">");
if(fim > 0 ){
logger.info("From: "+from.substring(ini+1,fim));
}else{
logger.info("From: "+from);
}
}
//Armazenando o conteudo na mensagem em um objeto
msgObj = messages[i].getContent();
//Verificando se está intanciado em MultiPart
if (msgObj instanceof Multipart) {
//Pegando as partes da mensagem
this.multipart = (Multipart) messages[i].getContent();
//Quantidade de anexos
int qtdPartes = 0;
//Verificar novamente a conexão com o servidor de email devido o método não continuar
if(conexaoServidorEMail()){
qtdPartes = this.multipart.getCount();
}else{
break for1;
}
logger.info("Quantidade de anexos: "+qtdPartes);
for(int y=0; y < qtdPartes; y++){
//Pegando as partes da mensagem
this.part = this.multipart.getBodyPart(y);
//Pegando o TIPO
this.contentType = this.part.getContentType();
//System.out.println("ContentTYPE: "+contentType);
if (this.contentType.startsWith("text/plain")){
//Imprimir a mensagem
//System.out.println(part.getContent().toString());
}
//Pegando nome do arquivo
String anexo = this.part.getFileName();
//Validação para verificar se o arquivo é um XML
if(anexo != null){
if(validarXML(this.part)){
logger.info("Arquivo XML identificado: "+this.part.getFileName().replace("/", "_").replace("\\", "-"));
//Salvando arquivo XML
salvarArquivo(this.part);
}
}
}
//Excluindo mensagem
messages[i].setFlag(Flags.Flag.DELETED, true);
logger.info("Mensagem deletada do servidor!");
//Processar 10 mensagens por vez
if(qtdMsg > 10 && i >= 9) break for1;
}else{
//Mensagem não possui MultiPart - Somente TEXTO
//Excluir mensagem
messages[i].setFlag(Flags.Flag.DELETED, true);
logger.info("Mensagem deletada do servidor!");
//Processar 10 mensagens por vez
if(qtdMsg > 10 && i >= 9) break for1;
}
}
Obrigado a todos!