Pode o XStream popular um objeto com os valores de um xml que NÃO foi gerado a partir deste mesmo objeto?
Enquanto eu gero um xml de um tipo qualquer com o XStream, tudo funciona bem, e vai de objeto pra XML e vice-versa numa boa.
Porém agora estou precisando popular um objeto com dados de um XML que NÃO foi gerado a partir deste objeto, ou seja, eu não tenho acesso ao BEAN que deu origem a este xml, porém eu recebo este xml como resposta de um web service, e preciso guardar e tratar os campos que vem nele.
Criei um tipo com todos os atributos do xml que recebo, mas o Xstream por algum motivo parece não conseguir realizar o “fromXML” e popular o objeto, talvez porque o xml não foi gerado a partir dele, ou seja, o objeto servirá para guardar os dados, mas não foi ele que deu origem aos dados, apesar de possuir os mesmo atributos.
Eu tô ligado, porém foi um pouco mais complicado do que isso pra resolver. Somente ter os atributos não foi o suficiente, leia abaixo!
É exatamente isso, porém baixei o projeto dele e nao consegui achar uma lib que ficou faltando, e como to sem tempo de ficar ‘catando’ acabei encontrando uma solução interessante aqui: enganar o XStream! Isso mesmo!
Pode parecer louco, mas está funcionando:
String xmlRetorno = //retorno dinamico do webservice
Page pg = new Page();
xstream.alias("page",Page.class);
String beanEmXML = xstream.toXML(pg);
pg = (Page)xstream.fromXML(xmlRetorno);
System.out.println("Nome: " + pg.getNome());
O que eu fiz?
Inicializei o xstream como se eu fosse criar um xml, e realmente eu faço isso, assim os meus tipos são inicializados.
Porém eu não uso a string xml que ele gera, mas depois gravo por cima dos objetos, que ele usou para gerar o xml, os dados de uma outra string formatada também em xml, que é a minha resposta, e assim, somente assim, depois de muitas tentativas, ele conseguiu popular os beans com dados de um outro xml…
Vlw pela ajuda aí.
[]´s