Alias dinâmico com XStream

2 respostas
crpablo

Fala galerinha...

Antes de tudo feliz natal a todos.... mas enquanto o perú não vai pro forno, nós estamos aqui na batalha... =D

Vamos ao que interessa...

Eu estou lendo as tabelas de um BD com JDBC com o método abaixo que retorna uma lista com o conteúdo da tabela em questão:

// Retorna uma lista com os dados das tabelas
	@SuppressWarnings("unchecked")
	public List getDadosTabelas(String nomeTabela) {

		PreparedStatement ps = null;
		ResultSet rsPegaDados = null;
		List listaDados = new ArrayList();

		try {
			ps = getConnection()
					.prepareStatement("SELECT * FROM " + nomeTabela);

			rsPegaDados = ps.executeQuery();

			int qntColunas = getQuantidadeColunas(nomeTabela);
			
			while (rsPegaDados.next()) {
				for (int j = 0; j < qntColunas; j++) {
					listaDados.add(rsPegaDados.getString(j + 1));
					
				}
			}
			ps.close();
			getConnection().close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return listaDados;
	}

Com o método abaixo eu pego essa lista e converto pra XML com o XStream:

// Gera o arquivo XML
	public void geraXML(String nomeTabela) {

		xstream = new XStream();
		List listaObj = tabelas.getDadosTabelas(nomeTabela);

		String objetosXML = xstream.toXML(listaObj);

		try {
			FileOutputStream gravaXml = new FileOutputStream(nomeTabela
					+ ".xml");
			gravaXml.write(objetosXML.getBytes());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Meu problema é o seguinte, quando eu converto essa lista pra XML, o arquivo gerado fica como se todos objetos fossem do tipo String, porém eu preciso que os mesmos fiquem com o tipo especifico de cada coluna.

Ex: Se o objeto é da coluna ID eu preciso que ele fique assim <ID>0001</ID> e não <string>0001</string> como está acontecendo.

Sei que é possível utilizar alias no XStream, mas esse método não vai gerar os XML's de uma ou outra tabelas de forma que eu possa específicar qual o alias de cada coluna e classe, isso deveria ser gerado dinamicamente. Cada tabela que ele ler, ele pega o tipo da coluna e coloca no alias na hora de gerar o XML.

Alguém já fez algo do tipo, ou tem alguma idéia de como fazer isso?

Abraço!!!!

2 Respostas

renatosilva

O Xtream é mais para persistência, em XML, e persistência você já tem, em banco de dados. Será que você precisa mesmo gerar um XML? Se sim, você precisa de total controle de como ele será gerado? Ele vai ser usado para quê?

De qualquer forma deve haver algum método para pegar o nome da coluna atual, aí você passa isso para o addAlias do XStream. Porém, a forma que eu acho mais interessante é obter, a partir da query, os objetos de seu modelo (por exemplo uma instância de Pessoa para uma tabela de pessoas) e aí sim usar o Xtream sobre eles e não sobre uma lista.

PS: muito estranho,as células da tabela são guardadas na lista uma após a outra, do mesmo registro ou não, né?

renatosilva

Se quiser dá uma olhada no meu brinquedinho: http://xmlvomiter.sf.net kkkkk

Criado 24 de dezembro de 2007
Ultima resposta 24 de dez. de 2007
Respostas 2
Participantes 2