XML gerado incorreto pelo XStream

1 resposta
guigas66

Pessoal Boa Tarde,

Estou utilizando o XStream (API parseamento XML -> Objeto), esta API é muito boa, pois eu transformo um XML em 110 entidades em milisegundos.
Mas estou com um problema na transformação da Entidade para XML.
Estou utilizando Hibernate, com as Entidades anotadas.
Vou descrever os passos do que esta ocorrendo para facilitar a solução.

1º- Resgato a Entidade da base de dados com o findById

Object obj = daoLocal.findById(idLong);

Este meu Objeto possui um array de outro objeto, que é FetchType.LAZY portanto o hibernate não me traz este objeto sem solicitação de pelo get.

2º- Logo após envio para o XStream realizar o parseamento.

String xml = xstream.toXML(obj);

3º- O XML gerado é este:

<owner class="infCTeNorm" reference=".."/> <cachedSize>-1</cachedSize> <role>br.com.cscorp.cte.entity.InfCTeNorm.veicNovos</role> <key class="long">152</key>

Pelo meu XSD não posso ter uma tag <owner class= , portanto gostaria de saber qual o motivo ele não recupera o Segundo Objeto. (SubObjeto)

No meu entendimento tem uma possivel explicação:

  • Como o objeto retornado pelo Hibernate não é na verdade uma entidade REAL, é um [color=red] PROXY [/color], O XStream não consegue parsear pois deve usar Reflection e não é invocado o get() de verdade, portanto ele não obtem as informações do banco.

Gostaria de uma solução, pois acredito que o alguem já tenha passado por este problema.

Obrigado a todos.

Guilherme

1 Resposta

guigas66

Pessoal,

Consegui o objetivo que no meu caso era um XML limpo (somente com as tags dos campos desejados), mas não utilizei o XStream.
Realmente o problema que detalhadei abaixo sobre o objeto proxy era verdade, o XStream transforma em tag todas as sujeiras que objeto proxy do Hibernate tem, (sujeiras são os atributos que não tem relação com os atributos da entidade), a prova disso foi que mudei os meus relacionamentos para FETCH.EAGER ou FETCH.JOIN e apareceram outras tags estranhas, mas continha as informações dos objetos filhos.

Resumindo utilizei o JAXB, assim meu MARSHAL (Entidade -> XML) ficou correto somente os atributos da entidade.
O JAXB é um pouco mais complexo de implementar e um pouco mais lento, mas resolveu meu problema.

Se alguem conseguir resolver este problema com o XStream, responda este post, pois gostaria saber qual foi a solução encontrada.

Abraços

Criado 10 de dezembro de 2009
Ultima resposta 14 de dez. de 2009
Respostas 1
Participantes 1