Converter um resultado do Xtream para varios Objetos

Galera, estou populando uma string atraves do XTtream

public String getLotesImpressaoWS(int idEmpresa)throws XFireFault{
		try {
			List lista = new LotesImpressaoDAO().getLotesImpressao(idEmpresa);
			XStream xstream = new XStream();
			xstream.alias("lotes", ImpressaLotesDTO.class);
			String result = "";
			for(Iterator iter = lista.iterator(); iter.hasNext();){
				ImpressaoLotesDTO linha = (ImpressaLotesDTO)iter.next();
				ImpressaoLotesDTO lotesD = new ImpressaLotesDTO(linha.getIdLoteImpressao(),linha.getIdEmpresa(),linha.getTipoLote(),linha.getPrioridadeLote(),linha.getStatusLote());
				
				result += xstream.toXML(lotesD);
			}
			System.out.println(result);
			
			
			return result;
		} catch (Exception e) {
			throw XFireFault.createFault(e);
		}
	}	

Resultado obtido:

<lotes>
  <idLoteImpressao>7</idLoteImpressao>
  <idEmpresa>4</idEmpresa>
  <tipoLote>ENVELOPES</tipoLote>
  <prioridadeLote>1</prioridadeLote>
  <statusLote>ATIVO</statusLote>
</lotes><lotes>
  <idLoteImpressao>8</idLoteImpressao>
  <idEmpresa>4</idEmpresa>
  <tipoLote>ENVELOPES</tipoLote>
  <prioridadeLote>2</prioridadeLote>
  <statusLote>ATIVO</statusLote>
</lotes>

Como tranformar novamente em objetos sendo que retornam vários lotes?

Dessa forma consigo apenas pegar o primeiro:

ImpressaoLotesDTO lotes = (ImpressaoLotesDTO)xstream.fromXML(result);
System.out.println(lotes.getIdLoteImpressao());
System.out.println(lotes.getIdEmpresa());
System.out.println(lotes.getTipoLote());
System.out.println(lotes.getPrioridadeLote());
System.out.println(lotes.getStatusLote());

Estou trafegando essa String no Server do meu webservice e preciso converter em Objetos no meu Client.

O nome xstream veio justamente por trabalhar primeiramente com streams. Os metodos to e fromXml são somente de ajuda:

StringReader someReader = new StringReader(suaStringAqui);
ObjectInputStream in = xstream.createObjectInputStream(someReader);

obj1 = () in.readObject();
obj2 = () in.readObject();
obj3 = () in.readObject();

Resolvido?

Abraço

ps: o seu xml para ser valido precisa de uma tag pai… portanto faça antes de qualquer coisa:

content = “” + content + “”

Resolvido, guilherme obrigado!

Aí pessoal, estou com um problema parecido, tenho esse método:

[code]public void print(int idOrdemProducao) throws Exception {
String xml = new ClienteWs().impressaoEnvelopeWS(idOrdemProducao);
XStream xstream = new XStream();
xstream.alias(“lote”, LoteImpEnvelopesDTO.
LoteImpEnvelopesDTO lote = (LoteImpEnvelopesDTO) xstream.fromXML(xml);

print(lote);

}[/code]
A minha String xml tem esse conteúdo:

<lote> <encomendas> <encomenda> <codigo>4</codigo> <ordem> <codigo>0</codigo> </ordem> <pedido> <codigo>1</codigo> <periodo>07/02/2007 A 28/02/2007</periodo> <mensagem>aaaaaa</mensagem> </pedido> <ocorrencia> <codigo>0</codigo> </ocorrencia> <empresaDestino> <codigo>0</codigo> <nome>PEDROSA CONSULTING</nome> <cnpj>52201681491897</cnpj> </empresaDestino> <enderecoDestino> <logradouro>R NELIO BATISTA GUIMARAES</logradouro> <numero>114</numero> <cep>03802-005</cep> <bairro>PARQUE BOTURUSSU</bairro> <cidade>SAO PAULO</cidade> <estado>SP</estado> <complemento></complemento> </enderecoDestino> <usuarios> <usuario> <nome>JOAO DA SILVA</nome> <matricula>300108702</matricula> <envelope> <sequencia>1</sequencia> <totalBeneficios>7260.0</totalBeneficios> <itens> <item> <qtd>22</qtd> <valorUnitario>330.0</valorUnitario> <valorTotal>0.0</valorTotal> <produto> <codigo>00.06</codigo> <descricao>SODEXHO PASS - REFEIÇÃO (PAPEL) - TALÃO COM 22 FOLHAS DE R$ 15.00</descricao> </produto> </item> </itens> </envelope> </usuario> </usuarios> </encomenda> </encomendas> </lote>
E na linha

LoteImpEnvelopesDTO lote = (LoteImpEnvelopesDTO) xstream.fromXML(xml);

Aparece o seguinte erro:

[code]com.thoughtworks.xstream.converters.ConversionException: encomenda : encomenda
---- Debugging information ----
message : encomenda : encomenda
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : encomenda : encomenda
class : br.com.smartbeneficios.dto.LoteImpEnvelopesDTO
required-type : java.util.ArrayList
path : /lote/encomendas/encomenda
line number : 3
class : br.com.smartbeneficios.dto.LoteImpEnvelopesDTO
required-type : java.util.ArrayList
path : /lote/encomendas/encomenda
line number : 3

at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.annotations.AnnotationReflectionConverter.unmarshallField(AnnotationReflectionConverter.java:52)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:169)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:121)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)
at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:832)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:819)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:767)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:759)
at br.com.smartbeneficios.reports.ImpressaoEnvelope.print(ImpressaoEnvelope.java:41)
at br.com.smartbeneficios.reports.ImpressaoEnvelope.main(ImpressaoEnvelope.java:232)

Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: encomenda : encomenda
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:72)
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.CGLIBMapper.realClass(CGLIBMapper.java:40)
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.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:62)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:57)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
… 16 more[/code]

Será que alguém sabe como corrijir isso? Agradeço por qualquer ajuda!

Você deve ter gerado alias pra sua classe encomenda ai ficou no xml apenas “encomenda”, ao transformar pra objeto novamente o xstream não acha a classe que se referencia ao elemento “encomenda”, por isso da “CannotResolveClassException”.

Obrigado pela ajuda! Consegui resolver, o problema era que eu tinha que setar os alias do XStream de todos os beans que eu estou utilizando!

Como ficou ao final ? Estou tendo o mesmo problema porque tenho uma entidade que possui um list dentro. Ele não reconhece os objetos dentro do list que são apenas strings simples e aí nao carrega o pai.
Mesmo que eu crie os alias para as strings ele dá erro quando chega no segundo objeto da lista… =(