Hierarquia de Tipos no XStream

Pessoal, alguém por gentileza poderia me ajudar com uma ‘pedra no meio do caminho’ no XStream?!!

Eu tenho 4 tipos: Page, Tipo2, Tipo3 e Tipo4:

O tipo Page possui o Tipo2, que possui o Tipo3, que possui o Tipo4:

Ao gerar um XML com o XStream, tudo funciona bem, tendo como resultado o seguinte documento:

<page>
 <tipo2> 
  <tipo3>
   <tipo4></tipo4>
  </tipo3>
 </tipo2>
</page>

Meu problema está justamente na hora de voltar os dados para os objetos, o XStream está dando o seguinte erro quando eu executo o método fromXML(strXml);

[quote]Exception in thread “main” com.thoughtworks.xstream.mapper.CannotResolveClassException: page : page
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:49)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:76)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:60)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:76)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:34)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:113)
at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:846)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:833)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:781)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:773)
at br.gov.infoseg.util.XMLCreator.xml2Str(XMLCreator.java:46)
at br.gov.infoseg.actions.TestBean.main(TestBean.java:51)[/quote]

Minha hierarquia de Tipos parece estar correta, pois ao gerar o XML ele gera exatamente da maneira que eu preciso gerar, ou seja, com a hierarquia correta, porém ao voltar está dando este erro, alguém sabe dizer o porque, ou alguma luz?

Agradeço desde já alguma ajuda
Vlw
[]´s

Voce pode colocar o codigo para voltar os dados para os objetos? estou precisando disso… OBRIGADO

Pode sim, desde que você tenha os seus objetos devidamente criados, e costuma funcionar bem, mas eu to tendo este erro que está me atrasando muitooo!!!

Aqui no Guj tem um tuto sobre XStream, dá uma procurada aí que é super simples.
É mais ou menos assim:

[code]import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;

public class TesteXStream
{
public static void main(String[] args)
{
XStream xstream = new XStream();
Pessoa pessoa = new Pessoa();
pessoa.setNome(“Vinci Pegoretti Amorim”);
pessoa.setEmail(“vinci_amorim@yahoo.com.br”);
pessoa.setXxxx(“XxXxXxX”);

     List contatos = new ArrayList(1);
     contatos.add(pessoa);

     // Passando os dados de Objetos Java para XML
     String contatosEmXML = xstream.toXML(contatos);

     System.out.println("\nContatos em XML:");
     System.out.println(contatosEmXML);

     // Passando os dados de XML para Objetos Java
     List amigos = (List) xstream.fromXML(contatosEmXML);
     Pessoa pessoa2 = (Pessoa) amigos.get(0);

     System.out.println("Objeto Java:");
     System.out.println("Nome: " + pessoa2.getNome());         
     System.out.println("Nome: " + pessoa2.getEmail());
}

}[/code]

Esta simples classe faz a passagem de objeto para XML e vice-versa, XStream é muito tranquilo, mas no meu caso específico falta algo que ainda não estou conseguindo enxergar…
Obs: para a classe acima funcionar vc precisa criar os tipos declarados nela, com seus respectivos getters e setters.

[]´s

haham… ja dei uma olhada no tuto… e foi a partir dali que eu criei o meu xml…

Haaa… eu sei que o topico de duvida é seu… mas ja fazendo uma pergunta…

Voce sabe como utilizar um arquivo XML gravado em algum diretorio?

É que eu tenho umm programa que exporta para um arquivo .xml… e gostaria de pegar esse arquivo para jogar para o mysql…

Você tem q fazer a leitura do seu XML, jogar o conteudo dele numa String e depois fazer o que vc quer com a String, no seu caso, jogar no banco.

Acredito que a classe BufferedReader resolva o seu problema, ou senão talvez a StreamReader, FileReader, dê uma pesquisada por aquí…

[]´s

[quote=Rage]Você tem q fazer a leitura do seu XML, jogar o conteudo dele numa String e depois fazer o que vc quer com a String, no seu caso, jogar no banco.

Acredito que a classe BufferedReader resolva o seu problema, ou senão talvez a StreamReader, FileReader, dê uma pesquisada por aquí…

[]´s[/quote]

Ok amigo… Obrigado… vou dar uma pesquisada… desculpa por eu não ter te ajudado… talvez numa proxima… até mais

Tente registrar suas classes com “xstream.alias”, pra mim funcionou!

exatamente como o camarada disse…

mesmo usando o annotation para definir o alias das Classes, apresentava esse erro.

Quando fiz o objXStream.alias(“elementName”,POJO.class); aí funcionou

onde elementName = o nome do elemento
POJO = é a classe que representa esse elemento.

obrigado pessoal.
abraços,