Gravar Objeto que contem Lista em XML

4 respostas
I

Ola pessoal, sou novo aqui no GUJ e como percebi que as maiorias de minhas duvidas procuradas por ai sempre tinha seu Final em um link aqui para o GUJ resolvi fazer me registrar.

Sou novo no mundo Java e gostaria de saber como gravar uma lista Em XML !

na verdade é assim:

Tenho uma classe chamada Curso que é um Beam

public class Curso {

private Integer id;

private List modulos;



}

Estive usando a Classe XStream para gerar o com os dados dessa classe, mas a lista não éra exibida.
no xml ficava assim:

depois tentei com XMLEncoder, mas não adiantou.

Se alguem ja passou por isso ou sabe como e puder ajudar fico grato ! :slight_smile:

obrigado
Icaro

4 Respostas

I
Como  a sua classe que mexe com o XStream???Posta ela aqui!

Certamente vc não soube fazer o XStream entender o tipo.

Quando falo Tipo: List->Objeto->List

Não uso o XStream a um tempo, mas pelo que eu lembre era algo do tipo:

Modulo m=new Modulo()

Modulo m1=new Modulo();

E no ArrayList:

List list = new ArrayList();

list.add(m);

list.add(m1);

E depois pegava:



String xml = xstream.toXML(list);

List resultado= (List) xstream.fromXML(xml);

Modulo m0 = (Modulo) resultado.get(0);

 não sei se ele tem problemas com tipos genéricos, como vc fez.
I

A classe é essa:

package br.com.leadertech.scorm;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;

public class GeradorXML {
	public String gerarXML(Curso curso, String nomeArq){
		String msg = "";
		XStream xstream = new XStream();
		ModuloCurso modulos = new ModuloCurso();
		
		curso.setModulos(modulos.modulosCursos(curso.getId()));
		
		String cursoEmXML = xstream.toXML(curso);

		File file = new File(nomeArq + ".xml");

		if(file.exists()){
			msg = "Arquivo existente !";
		}else{
			try {
				FileWriter writer = new FileWriter(file);
				PrintWriter saida = new PrintWriter(writer);
				saida.print(cursoEmXML);
				saida.close();
				writer.close();
				msg = "Arquivo xml Gerado com sucesso !";
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return msg;
	}
}

Estou Recebendo Curso como parametro e utilizo o id para fazer uma consulta e me retornar os modulos que pertencem a esse Curso, e setar essa lista de modulos em Curso.

E depois gerar o Codigo XML com o Objeto Curso.

Minha classe Curso:

package br.com.leadertech.scorm;

import java.util.Date;
import java.util.List;

import com.thoughtworks.xstream.converters.basic.DateConverter;

public class Curso {

	private Integer id;

	private String descricao;

	private String titulo;

	private String permiteAcessoVisitante;

	private String dataAutorizacao;

	private String dataInicio;

	private String linguaCurso;

	private Integer aprovador;

	private Integer criador;
	
	private Integer responsavel;

	private String localizacaoPasta;

	private String criarLocalizacoPasta;

	private Integer categoria;
	
	private List<Modulo> modulos;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getPermiteAcessoVisitante() {
		return permiteAcessoVisitante;
	}

	public void setPermiteAcessoVisitante(String permiteAcessoVisitante) {
		this.permiteAcessoVisitante = permiteAcessoVisitante;
	}

	public String getDataAutorizacao() {
		return dataAutorizacao;
	}

	public void setDataAutorizacao(String dataAutorizacao) {
		this.dataAutorizacao = dataAutorizacao;
	}

	public String getDataInicio(){
		return dataInicio;
	}

	public void setDataInicio(String dataInicio) {
		this.dataInicio = dataInicio;
	}

	public String getLinguaCurso() {
		return linguaCurso;
	}

	public void setLinguaCurso(String linguaCurso) {
		this.linguaCurso = linguaCurso;
	}

	public Integer getAprovador() {
		return aprovador;
	}

	public void setAprovador(Integer aprovador) {
		this.aprovador = aprovador;
	}

	public Integer getCriador() {
		return criador;
	}

	public void setCriador(Integer criador) {
		this.criador = criador;
	}

	public Integer getResponsavel() {
		return responsavel;
	}

	public void setResponsavel(Integer responsavel) {
		this.responsavel = responsavel;
	}

	public String getLocalizacaoPasta() {
		return localizacaoPasta;
	}

	public void setLocalizacaoPasta(String localizacaoPasta) {
		this.localizacaoPasta = localizacaoPasta;
	}

	public String getCriarLocalizacoPasta() {
		return criarLocalizacoPasta;
	}

	public void setCriarLocalizacoPasta(String criarLocalizacoPasta) {
		this.criarLocalizacoPasta = criarLocalizacoPasta;
	}

	public Integer getCategoria() {
		return categoria;
	}

	public void setCategoria(Integer categoria) {
		this.categoria = categoria;
	}

	public List<Modulo> getModulo() {
		return modulos;
	}

	public void setModulos(List<Modulo> modulos) {
		this.modulos = modulos;
	}
}
I

Cadê o alias para a sua classe???

public List&lt;Modulo&gt; getModulo() {   
        return modulos;   
    }   
  
    public void setModulos(List&lt;Modulo&gt; modulos) {   
        this.modulos = modulos;   
    }
Algo + ou - do tipo(para pegar cada módulo):



XStream xstream = new XStream();

xstream.alias(modulos, Modulo.class);

List<Modulo> modulos= new ArrayList<Modulo>();

Modulo m;

while (rs.next()) {

m= new Modulo();

m.setId_Modulo();

//add mais alguma coisa

modulos.add(m);

}

E seta:



modulo.setModulo(modulos);

String s= xstream.toXML(modulo);



e para exibir:



Modulo m = (Modulo) xstream.fromXML(s);

for(Modulo mod: m.getModulos()){

System.out.println(mod.getId_Modulo());

System.out.println(mod.getQualquerCoisa());

//blablabla…

} 

Olha o tutorial deles sobre alias, tenho certeza que mata a sua dúvida:

<a href="http://xstream.codehaus.org/alias-tutorial.html" class="onebox" target="_blank">http://xstream.codehaus.org/alias-tutorial.html</a>
I

Então cara, cada modulo é add na classe ModuloCurso, e tem o metodo chamado modulosCursos para
preencher a lista de modulos.

curso.setModulos(modulos.modulosCursos(curso.getId()));

Vlw pela ajuda.

Vou dar uma lida nesse Tuto que vc passou, e jaja eu posto aqui se deu certo !

Criado 4 de novembro de 2007
Ultima resposta 5 de nov. de 2007
Respostas 4
Participantes 2