Result Json recursive - Vraptor3 - CircularReferenceException

3 respostas
bglbruno

Olá Pessoal, boa tarde!

Estou com um problema ao retornar um json de uma lista de objetos.
Tenho o seguinte:

E quando acesso a página essa exception é disparada

13:26:27,982 DEBUG [DefaultExceptionMapper] find for exception class com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException
10/07/2012 13:26:27 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException: Recursive reference to parent object
---- Debugging information ----
item-type           : br.com.nextrans.erp.modelo.bean.Equipamento
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
[...]
Caused by: com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException: Recursive reference to parent object
---- Debugging information ----
item-type           : br.com.nextrans.erp.modelo.bean.Equipamento
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
-------------------------------

Meu modelo é o seguinte

@Entity
public class OrdemServico {

	@Id @GeneratedValue
	private Long idOrdemServico;
	
	@Type(type = "org.joda.time.contrib.hibernate.PersistentLocalDateTime")
	private LocalDateTime inicio = new LocalDateTime();
	
	@Type(type = "org.joda.time.contrib.hibernate.PersistentLocalDateTime")
	private LocalDateTime previsaoConclusao = new LocalDateTime();
	
	@Type(type = "org.joda.time.contrib.hibernate.PersistentLocalDateTime")
	private LocalDateTime conclusao;
	
	@Enumerated(EnumType.STRING)
	private StatusOrdemServico status = StatusOrdemServico.ABERTO;
	
	private Double km;

	@Column(length = 400)
	private String obs;
	
	@OneToOne
	@JoinColumn
	private Equipamento equipamento;
	
	@OneToOne
	@JoinColumn
	private Filial filial;
	
	@Enumerated(EnumType.STRING)
	private TipoManutencao tipoManutencao;
	
	@Enumerated(EnumType.STRING)
	private TipoExecucaoServico tipoExecucao;
	
	@OneToOne
	@JoinColumn
	private Funcionario mecanico;
	
	@OneToOne
	@JoinColumn
	private Fornecedor fornecedor;
	
	@ManyToMany
	@JoinColumn
	private List<GrupoTarefa> grupos = new ArrayList<GrupoTarefa>();
	
	@OneToOne(cascade=CascadeType.ALL)
	@JoinColumn
	private Emissao emissao;
}

Eu não tenho a mínima ideia do que seja.
E com apenas include() no result json não resolve meu problema.

3 Respostas

Lucas_Cavalcanti
com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException: Recursive reference to parent object  
---- Debugging information ----  
item-type           : br.com.nextrans.erp.modelo.bean.Equipamento

referencia circular no equipamento.

o equipamento tem uma referencia pra ordem de serviço? se sim vc precisa colocar um .exclude(“equipamento.ordemDeServico”) depois do recursive, ou algo do tipo.

Rafael_Guerreiro

Se eu não me engano, esse erro aconteceu por que algum modelo seu referencia de volta para esse e ele deve entrar em um loop infinito.

Olha se você não tem um obleto do tipo OrdemServico dentro das classes: Equipamento, Filial, Funcionario, Fornecedor, GrupoTarefa ou Emissao…

bglbruno

Muito obrigado pelas dicas pessoal!
Mas, consegui resolver seguindo essa dica
http://www.wbotelhos.com.br/2010/08/26/vraptor-3-evitando-circularreferenceexception-do-xstream/

Tenho uma outra dúvida agora, mas já não cabe a este tópico, vou pesquisar, se não achar nada, vou criar um outro.
Obrigado!

Criado 10 de julho de 2012
Ultima resposta 10 de jul. de 2012
Respostas 3
Participantes 3