[RESOLVIDO] XStream converter xml para objeto

Boa tarde, comecei a utilizar o XStream para ler um xml e alterar alguns valores, para isso queria converter esse xml em um objeto, mas quando realizo o processo de conversão está dando erro, dei uma boa pesquisada na net e não encontrei solução, mas encontrei uma informação que me preocupou um pouco, de que o XStream so converte de xml para objetos se o xml tiver sido criado por ele mesmo. Isso realmente procede? por que ai quebrou as minhas pernas. Segue o meu codigo:

Esse é o erro:

Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: ans:mensagemTISS : ans:mensagemTISS
        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:96)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:52)
        at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:136)
        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
        at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
        at com.thoughtworks.xstream.XStream.fromXML(XStream.java:845)
        at xml.Teste.recuperaObjeto(Teste.java:105)
        at xml.Teste.main(Teste.java:113)
Java Result: 1

E aqui onde eu tento converter:

public void recuperaObjeto() {
        try {
            FileReader arquivoXml = new FileReader(new File("D:\\00000000000000011059_243c7b1c0bae73ca6aad64ec6cb5c661.xml"));
            BufferedReader bXml = new BufferedReader(arquivoXml);
            while (bXml.readLine() != null) {
                arquivo = arquivo + bXml.readLine()+"\r\n";                
            }
            System.out.println(arquivo);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        MensagemTISS mt = (MensagemTISS) xstream.fromXML(arquivo);
        System.out.println("RESULTADO: " + mt.getSchemaLocation());

    }

Só uma observação é que minha arvore hierarquica de classes está correta, fiz um teste para gerar o xml, e ele gerou exatamente como é esperado.

Qual versão do XStream você esta usando?
Recomendo usar a última.

A informação não procede, ele consegue gerar objetos a partir de XML criado por você ou por qualquer outro processo que não tenha sido ele mesmo, desde que o Objeto esteja de acordo com o XML.

Abraços,

Estou usando a ultima versão que é a 1.3.1.

Então deve ter algum atributo no seu XML que não esta no Objeto Java e ele não ta conseguindo converter ou faltando alias para indicar ao XStream que o elemento X do XML é referente ao atributo Y do Objeto Java.

Abraços,

Eu ja dei uma olhada nos alias e estão todos corretos, e tambem os objetos, tanto que eu testei pra criar um novo xml pelos objetos que eu tenho e ele me retornou o xml sem erros. Uma coisa que eu observei foi o encoding, por que o xml começa assim:

Mas eu não tenho um objeto definido para ele. Será que é esse o problema?

Alguem mais pode me dar uma mão ?!

Eu acabei de fazer mais alguns testes e vi que quando usamos alias ele não retorna para o objeto, ou seja para que ele retorne o xml para um objeto o xml tem que estar com nome de pacote e etc… nesse formato:

<entidades.Pessoa> <nome>Joe</nome> <sobrenome>Walnes</sobrenome> <telefone> <codigo>123</codigo> <numero>1234-456</numero> </telefone> <fax> <codigo>123</codigo> <numero>9999-999</numero> </fax> </entidades.Pessoa>

Não dando então pra recuperar se o xml estiver como:

<pessoa> <nome>Joe</nome> <sobrenome>Walnes</sobrenome> <telefone> <codigo>123</codigo> <numero>1234-456</numero> </telefone> <fax> <codigo>123</codigo> <numero>9999-999</numero> </fax> </pessoa>

Será que alguem tem a solução para isso?

[quote=wagne23]Eu acabei de fazer mais alguns testes e vi que quando usamos alias ele não retorna para o objeto, ou seja para que ele retorne o xml para um objeto o xml tem que estar com nome de pacote e etc… nesse formato:

<entidades.Pessoa> <nome>Joe</nome> <sobrenome>Walnes</sobrenome> <telefone> <codigo>123</codigo> <numero>1234-456</numero> </telefone> <fax> <codigo>123</codigo> <numero>9999-999</numero> </fax> </entidades.Pessoa>

Não dando então pra recuperar se o xml estiver como:

<pessoa> <nome>Joe</nome> <sobrenome>Walnes</sobrenome> <telefone> <codigo>123</codigo> <numero>1234-456</numero> </telefone> <fax> <codigo>123</codigo> <numero>9999-999</numero> </fax> </pessoa>

Será que alguem tem a solução para isso?
[/quote]

O Xstream consegue com o o mesmo alias que gera o XML converter o XML para objeto Pessoa do pacote entidades se o alias estiver configurado corretamente.
Se for uma lista de pessoas tem que no alias usar List.class

Não sei se é seu caso.

Abraços,

Consegui, eu estava chamando o alias somente para criar o xml, mas pra voltar pro objeto eu tenho que chama-lo novamente. Obrigado pela ajuda de todos.

apesar de parado o projeto Castor…eu usaria ele…muito bom…