JavaBean, Reflection, toString() e toXML()

0 respostas
mcampelo

Pessoal,

utilizando a API de Reflection construi um Bean básico que pode ser utilizado tanto para debug (método toString()) quanto para geração de XML (através do método toXML()).

Esta versão que estou disponibilizando aqui é a versão mais simples do Bean, que não faz iteração em Collections e nem faz chamadas recursivas, é apenas um ponto de partida que acho que pode ser útil para muitos projetos.

Bean.java

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Bean {
	
	// 1 - toString()
	// 2 - toXML()
	private String printBean(int i) {
		StringBuffer sb = new StringBuffer();
		Class obj = getClass();		
		Method metodos[] = obj.getMethods();
		for (int j=0; j<metodos.length; j++) {
			Method m = metodos[j];			
			if (m.getName().startsWith("get") && m.getParameterTypes().length==0 && !m.getName().equals("getClass")) {				
				try {
					Object temp = m.invoke(this, null);	
					if (temp==null) {
						temp = "";												
					}
					// toString()
					if (i==1) {
						sb.append(m.getName().substring(3, m.getName().length())).append(": ");
						sb.append(temp);
					// toXML()		
					} else {
						String attr = m.getName().substring(3, m.getName().length()).toUpperCase();
						sb.append("<").append(attr).append(">");
						sb.append(temp);
						sb.append("</").append(attr).append(">");	
					}
				} catch (IllegalAccessException iae) {
					System.out.println(iae.getMessage());					
				} catch (IllegalArgumentException iae2) {
					System.out.println(iae2.getMessage());
				} catch (InvocationTargetException ite) {
					System.out.println(ite.getMessage());
				}				
			}
		}		
		return sb.toString();
	}

	public String toString() {		
		return printBean(1);
	}
	
	public String toXML() {
		return printBean(2);
	} 	
}

E um exemplo de utilização, Pessoa.java:

public class Pessoa extends Bean {
	
	private String nome;
	private int idade;

	public static void main(String[] args) {
		
		Pessoa p = new Pessoa();
		p.setNome("Marco Campelo");
		p.setIdade(22);
		System.out.println(p);
		System.out.println("XML: 
"+p.toXML());
		
	}

	public int getIdade() {
		return idade;
	}

	public String getNome() {
		return nome;
	}

	public void setIdade(int i) {
		idade = i;
	}

	public void setNome(String string) {
		nome = string;
	}
}

E o output da execução da classe Pessoa:

Idade: 22
Nome: Marco Campelo

XML: 
<IDADE>22</IDADE>
<NOME>Marco Campelo</NOME>

Espero que seja útil.

Abraços,

Criado 9 de março de 2004
Respostas 0
Participantes 1