XStream descerialização funciona de forma errada

1 resposta
filipeandrep

Prezados,

estou tendo um problema em pegar um xml e tetar transforma-lo em objetos com o xstream. Eu tenho um arquivo xml passo ele para dentro do objeto mas quando vou escrever o seu conteudo (em formato xml) este aparece totalmente sem os valores, parece que o xstream somente instancia os objetos. segue o codigo para conferencia.

classe que renderiza:

public class RenderToXML {

    public static String toXML(String nomeQuestionario, int idUsuario, String arqQuest) throws Exception {
        String path = RenderToXML.class.getResource("/").getPath() + "br/gov/inca/rbtmo/layout/xml/";
        BufferedReader in = new BufferedReader(new FileReader(path.replaceAll("%20", " ") + nomeQuestionario));
        StringBuffer buf = new StringBuffer();
        String str;
        while ((str = in.readLine()) != null) {
            buf.append(str);
        }
        in.close();
        XStream xStream = new XStream(new DomDriver());
        Class[] classes = {Formulario.class, Pagina.class, Pergunta.class, Opcao.class, TextoIdioma.class, TextoOpcao.class, TextoPergunta.class};
        xStream.processAnnotations(classes);
        xStream.autodetectAnnotations(true);


        Formulario formulario = (Formulario) xStream.fromXML(buf.toString());

        for (Pagina pagina : formulario.getPaginas()) {
            for (Pergunta pergunta : pagina.getPerguntas()) {
                pergunta.pegarRespostasBanco();
            }
        }
        return xStream.toXML(formulario);
    }
}

codigo xml:

<?xml version="1.0" encoding="UTF-8"?>
<formulario nome="2005-HLA" id="2626421" versao="2.0">
    <pagina id="1" nome="KEY">
        <pergunta id="PCAB1" nome="PCAB1" tipoTela="text" tipoDado="NUMERO">
            <texto-pergunta idioma="ingles">CIBMTR Center Number:</texto-pergunta>
        </pergunta>
    </pagina>
</formulario>

resultado gerado:

<formulario>
  <id>0</id>
  <pagina>
    <id>0</id>
    <pergunta>
      <pagina-html>0</pagina-html>
      <pagina-pdf>0</pagina-pdf>
      <sequencia>0</sequencia>
      <texto-pergunta/>
    </pergunta>
  </pagina>
</formulario>

vlw galera… desde já agradeço.

1 Resposta

filipeandrep

Achei a solução e então resolvi postar…

eu estou usando annotations para setar os alias e o meu arquivo xml possui atributos nas tags que devem ser declarados nas annotations… sendo assim a classe fica da seguinte forma:

@XStreamAlias(“formulario”)esta annotation que diz o alias da tag
public class Formulario {

@XStreamAlias("id")//esta annotation que diz o alias do atributo
@XStreamAsAttribute//esta annotation que diz que este elemento é um atributo e naum uma tag
private int id;
@XStreamAlias("nome")
@XStreamAsAttribute
private String nome;
@XStreamAlias("versao")
@XStreamAsAttribute
private String versao;
@XStreamImplicit
private List<Pagina> paginas = new ArrayList<Pagina>();

public int getId() {
    return id;
}

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

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getVersao() {
    return versao;
}

public void setVersao(String versao) {
    this.versao = versao;
}

public List<Pagina> getPaginas() {
    return paginas;
}

public void setPaginas(List<Pagina> paginas) {
    this.paginas = paginas;
}

}

vlw galera…

ps.: obrigado ao amigo Rodrigo Allemand pelas dicas.

Criado 18 de setembro de 2008
Ultima resposta 18 de set. de 2008
Respostas 1
Participantes 1