Guilherme_Silveira 12 de fev. de 2007
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
Guilherme_Silveira 12 de fev. de 2007
ps: o seu xml para ser valido precisa de uma tag pai… portanto faça antes de qualquer coisa:
content = “” + content + “”
Pedrosa 12 de fev. de 2007
Resolvido, guilherme obrigado!
von.juliano 16 de fev. de 2007
Aí pessoal, estou com um problema parecido, tenho esse método:
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 );
}
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:
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
Será que alguém sabe como corrijir isso? Agradeço por qualquer ajuda!
casmeiron 16 de fev. de 2007
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”.
von.juliano 16 de fev. de 2007
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!
viktorfss 28 de abr. de 2009
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… =(