Tenho um processamento com uma classe chamando uma outra.
Exemplo:
Tenho a registro0100. Nela chamo o ED022, ED021, etc…
Nesta ED022, tenho umas validações, exemplo:
boolean achou = false;
if (modulo.equals("2")) {
String[] linhaSeparada = listaParametros.get(5).split(Pattern.quote("|"));
if (linhaSeparada[0].equals(tipoCnso)) {
achou = true;
}
}
if (!achou) {
apontandoErroAlerta(arquivo, erroAlerta, tipoRegistroCampo, tipoRegistro, erroAlertaEncontradoRepository,
erroAlertaCampoEncontradoRepository, tipoCnso, contadorLinha, registro, erroAlertaRepository,
tipoRegistroCampoRepository, tipoRegistroRepository);
return;
}
Se a variável achou vira true, ele aponta o erro e deveria parar o processo. Mas não para.
Não deveria ir para o erro ED021, mas vai.
Como fazer para parar o processo mesmo.
Cara para mim não deu para entender como vc quer fazer algo
mas o método apontandoErrorAlerta está em um if que só será executado se achou for false
Você poderia colocar o código mais completo?
Isto seria um exemplo.
Queria saber como para um processo iniciado, que seja em qualquer classe, sem se por retorno.
Vou tentar melhorar o exemplo.
Tenho as classes registro0100, ED022, ED021, ED023 e Erro
O processo inicia na classe registro0100.
A classe registro0100, chama a classe ED022
Se a classe ED022, tiver erro chamar a classe Erro e para o processo na classe Erro
Se a classe ED022 não tiver erro chama a classe ED021
Se a classe ED021, tiver erro chamar a classe Erro e para o processo na classe Erro
Se a classe ED021 não tiver erro chama a classe ED023
Se a classe ED023, tiver erro chamar a classe Erro e para o processo na classe Erro
Se a classe ED023 finalizou corretamente
Conseguiu entender ?
Bom jovem, mas esse é o objetivo do retorno é você fazer algo dependendo do tipo do retorno!
o mais certo seria: já que os processo ocorre iniciado pelo o registro0100 então devo supor que ele é o principal onde se iniciar os processamentos, então ele chama a classe ED022 e espera um retorno da classe se ela retornar um valor false(Você pode criar o tipo de retorno que quiser ) por exemplo então a classe que tá fazendo o processamento principal que é a registro0100 chama a classe Erro e lá mesmo tu para o script e faz mais nada, ou então exibi uma mensagem e pronto para ali.
Caso o a classe ED022 retorne true, então a classe registro0100 chama a classe ED021 e assim por diante até chegar o script ao fim.
Ex:
public class Registro0100 {
public static void main(String[] args) {
//inicio do processamento
//instaciando a classe erro
Erro classe_error = new Erro();
ED022 classe1 = new ED022();
if (classe1.executar_processos()) {
//então executou com sucesso sem erro
ED021 classe2 = new ED021();
if (classe2.executar_processos()) {
} else {
classe_error.executa_processo_de_error();
}
} else {
//deu erro e chama a classe de error
classe_error.executa_processo_de_error();
}
}
}
Assim se tornando um encadeamento de ifs
Então não tem como fazer o que quero, isto é, de parar o processamento na classe erro ?
Pelo que eu entendi, basta apenas você colocar um break onde deseja encerrar o processo.
Já tinha tentando, mas não deixa.
Já tentou lançar uma Exception ?
É algo como:
if(erro == true){
throw new RuntimeException("Erro detectado, parando processamento");
}
Não funcionou
Está assim
public abstract class InserirErroLinha {
public static void apontandoErroAlerta(ArquivoEntity arquivo, ErroAlertaEntity erroAlerta,
TipoRegistroEntity tipoRegistro, TipoRegistroCampoEntity tipoRegistroCampo,
ErroAlertaEncontradoRepository erroAlertaEncontradoRepository,
ErroAlertaCampoEncontradoRepository erroAlertaCampoEncontradoRepository,
TipoErrosAlertasEncontradosEnum tipoErro, String valorLinha, Integer contadorLinha, List<String> cabecalho,
List<String> valores) {
ErroAlertaEncontradoController.setErroAlertaCampoEncontradoRepository(erroAlertaCampoEncontradoRepository);
ErroAlertaEncontradoController.setErroAlertaEncontradoRepository(erroAlertaEncontradoRepository);
ErroAlertaEncontradoController.salvarErroAlertaEncontrado(erroAlerta, tipoRegistro, tipoRegistroCampo,
contadorLinha, valorLinha, arquivo, arquivo.getEntidade(), arquivo.getIdentificacao(),
arquivo.getUsuario(), tipoErro, cabecalho, valores);
throw new RuntimeException("Erro detectado, parando processamento");
}
}
Bom geralmente você para o processamento, na classe que está fazendo este processamento principal, o exemplo que usei o processamento está ocorrendo na classe Registro0100, você poderia me informar, ou enviar o código onde tá ocorrendo esse processo principal?
Ai no fins da conta é tipo um retorno, só que o retorno é uma exceção e deve ser tratada com um Try Catch
Pelo visto vai ter que ter retorno mesmo ?
a melhorar maneira que eu vejo para isso é o tratamento de acordo com o retorno, e vc deve tratar essa retorno onde está ocorrendo o processamento principal