dúvida try catch

4 respostas
E

Olá pessoal tenho um bloco de código q pode jogar uma exception

o XStream.toXML() pode jogar a exception

public String geraXML(ListaDeNoticiasPerfil listaDeNoticiasPerfil){
		//instacia XStream 
		XStream x = new XStream(new DomDriver());
		x.autodetectAnnotations(true);
	    
		//parse xml 
		String xml;
		xml ="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
	    xml+= x.toXML(listaDeNoticiasPerfil);
		
	    //return String XML 
	    return xml;
	}

e eu queria saber se eu usar assim eu posso resgatar essa e.

private String criarXMLEIncluirTransferenciaNoticia(ListaDeNoticiasPerfil lista, int cdCliente,String username,String password){
		// instanciando GeradorDeXML 
		GeradorDeXML geradorDeXML = new GeradorDeXML();
		//preparando String para retorno
		String retorno;
		try {
			//gerando xml
			retorno = geradorDeXML.geraXML(lista);

			//Armazenando XML
			geradorDeXML.gravarXML(retorno, GeradorDeData.getData("BDHP"), cdCliente+"-"+username+"");

			//incluindo dados na tabela transferencia noticia
			TransferenciaNoticiaController transferenciaNoticiaController = new TransferenciaNoticiaController();
			transferenciaNoticiaController.inserir(lista, cdCliente);
		} catch (XStreamException e) {
			retorno = "Erro na geração do XML";
		}
		return retorno;
	}

4 Respostas

kmunga

Acredito que o instanciado GeradorDeXML geradorDeXML = new GeradorDeXML(); tenha que ficar dentro do try.

E
public String geraXML(ListaDeNoticiasPerfil listaDeNoticiasPerfil) throws XStreamException {
		// instacia XStream
		XStream x = new XStream(new DomDriver());
		x.autodetectAnnotations(true);

		// parse xml
		String xml;
		xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
		try {
			xml += x.toXML(listaDeNoticiasPerfil);
		} catch (XStreamException e) {
			throw new XStreamException(e.getMessage());
		}

		// return String XML
		return xml;
	}
fabiocortolan

Se vc quiser lançar a excessão pode fazer o método sem o try catch:

public String geraXML(ListaDeNoticiasPerfil listaDeNoticiasPerfil) throws XStreamException {  // Lançando a excessão aqui...
        // instacia XStream  
        XStream x = new XStream(new DomDriver());  
        x.autodetectAnnotations(true);  
  
        // parse xml  
        String xml;  
        xml = "&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt;\n";  
        // try {  
            xml += x.toXML(listaDeNoticiasPerfil);  
        // } catch (XStreamException e) {  
        //    throw new XStreamException(e.getMessage()); - ... não é necessário lançar aqui
        // }  
  
        // return String XML  
        return xml;  
    }

Só p/ deixar o código mais limpo, ficaria assim:

public String geraXML(ListaDeNoticiasPerfil listaDeNoticiasPerfil) throws XStreamException {  // Lançando a excessão aqui...
        // instacia XStream  
        XStream x = new XStream(new DomDriver());  
        x.autodetectAnnotations(true);  
  
        // parse xml  
        String xml;  
        xml = "&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt;\n";  
        xml += x.toXML(listaDeNoticiasPerfil);  
  
        // return String XML  
        return xml;  
}
drsmachado

ericrf:
Olá pessoal tenho um bloco de código q pode jogar uma exception

o XStream.toXML() pode jogar a exception

public String geraXML(ListaDeNoticiasPerfil listaDeNoticiasPerfil){
		//instacia XStream 
		XStream x = new XStream(new DomDriver());
		x.autodetectAnnotations(true);
	    
		//parse xml 
		String xml;
		xml ="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
	    xml+= x.toXML(listaDeNoticiasPerfil);
		
	    //return String XML 
	    return xml;
	}

e eu queria saber se eu usar assim eu posso resgatar essa e.

private String criarXMLEIncluirTransferenciaNoticia(ListaDeNoticiasPerfil lista, int cdCliente,String username,String password){
		// instanciando GeradorDeXML 
		GeradorDeXML geradorDeXML = new GeradorDeXML();
		//preparando String para retorno
		String retorno;
		try {
			//gerando xml
			retorno = geradorDeXML.geraXML(lista);

			//Armazenando XML
			geradorDeXML.gravarXML(retorno, GeradorDeData.getData("BDHP"), cdCliente+"-"+username+"");

			//incluindo dados na tabela transferencia noticia
			TransferenciaNoticiaController transferenciaNoticiaController = new TransferenciaNoticiaController();
			transferenciaNoticiaController.inserir(lista, cdCliente);
		} catch (XStreamException e) {
			retorno = "Erro na geração do XML";
		}
		return retorno;
	}


1 - Não.
Embora você tenha o código que está dentro do catch sendo executado, o fato de atribuir o valor da variável retorno como sendo a mensagem de erro não significa que você tratou a exceção.
Eu prefiro tratar as exceções em dois tipos, as que estão em um ponto de contato direto com o usuário (telas) e as que não estão (camada de controle, serviços ou modelo).
Quando estão direto em contato com o usuário, eu simplesmente trato imediatamente, com um try/catch, no catch eu capturo log de erro e apresento uma mensagem ao usuário.
Quando a exception pode ser lançada de um ponto que não está diretamente em contato com o usuário, eu trato com o throws na assinatura do método e, além disso, faço um try/catch caso queira personalizar a mensagem:

private String criarXMLEIncluirTransferenciaNoticia(ListaDeNoticiasPerfil lista, int cdCliente,String username,String password) throws XStreamException {
		// instanciando GeradorDeXML 
		GeradorDeXML geradorDeXML = new GeradorDeXML();
		//preparando String para retorno
		String retorno;
		try {
			//gerando xml
			retorno = geradorDeXML.geraXML(lista);

			//Armazenando XML
			geradorDeXML.gravarXML(retorno, GeradorDeData.getData("BDHP"), cdCliente+"-"+username+"");

			//incluindo dados na tabela transferencia noticia
			TransferenciaNoticiaController transferenciaNoticiaController = new TransferenciaNoticiaController();
			transferenciaNoticiaController.inserir(lista, cdCliente);
		} catch (XStreamException e) {
                        log.severe(e.getMessage());
			throw new XStreamException("Erro na geração do XML");
		}
		return retorno;
	}
Criado 13 de maio de 2013
Ultima resposta 14 de mai. de 2013
Respostas 4
Participantes 4