Vraptor 3.4.1 Problema com referência circular

9 respostas
Robert.c.a

Pessoal, estou com a seguinte exception na minha aplicação:

com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException:

Andei pesquisando e parece que esse problema não deveria acontecer mais após o vraptor 3.1.3, estou enganado?
O erro ocorre quando tento recuperar via ajax uma lista do meu objeto Route da forma abaixo:

List<Route> routeList = routeDao.findByDairy(id);
this.result.use(Results.json()).from(routeList).recursive().serialize();

Caso seja necessário a entidade do objeto:

@Entity
public class Route {

	/** ID no banco. */
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	/** Coluna ROUTE_LENGTH. */
	private Double length;
	/** Coluna ROUTE_TIME. */
	private Double time;
	/** Coluna START_POINT_COD. */
	@ManyToOne (fetch = FetchType.EAGER)
	@JoinColumn(name = "start_point_cod")
	private CollectPoint startPoint;
	/** Coluna END_POINT_COD. */
	@ManyToOne (fetch = FetchType.EAGER)
	@JoinColumn(name = "end_point_cod")
	private CollectPoint endPoint;
	/** Coluna TRUCK_COD. */
	@ManyToOne (fetch = FetchType.EAGER)
	@JoinColumn(name = "truck_cod")
	private Truck truck;
	/** Coluna DAIRY_COD. */
	@ManyToOne (fetch = FetchType.EAGER)
	@JoinColumn(name = "DAIRY_COD")
	private Dairy dairy;

Estou fazendo algo errado? Pelo que eu li a sintaxe e forma de uso era essa mesmo não?

9 Respostas

d34d_d3v1l

tenta:

result.use(Results.json()).from(routeList).include("truck").serialize();
Robert.c.a

Opa, iae d34d_d3v1l, tentei

pq sem o recursive() ele só retorna um json com os ids do Route. E o erro continua.

Lucas_Cavalcanti

tenta esse converter:
http://www.guj.com.br/java/254764-resolvido-duvida-sobre-validator-extjs-4--json--vraptor-340/5#1427839

R

.

Robert.c.a

Olá Lucas, coloquei a classe no meu projeto. Eu precisaria fazer alguma chamada explícita a ela ou só adicionar mesmo?
Caso não precise fazer nada, o erro persiste.

Lucas_Cavalcanti

vc precisa criar essa classe PersistentBagConverter e anotá-la com @Component

isso deveria funcionar, a menos que no seu recursive exista realmente uma referencia circular… nesse caso vc tem que excluir essa referência.

Robert.c.a

Opa, obrigado pela ajuda.
Então, foi isso mesmo que eu fiz, e continuou com o problema.
Acabei resolvendo no método da tentativa e erro, ai coloquei o result como:

Ta certo que isso resolveu a minha vida… mas eu achei uma solução meio “gambiarra”. Pela lógica, como o único campo que eu tirei foi o Dairy eu tentei:

E ai o erro voltou ^^
Eu não acho que tenha uma referência circular entre as entidades, pelo menos não diretamente… o mais perto disso é que
o Route referencia uma Dairy,
o CollectPoint também.
Isso pode ser a causa do erro?

Lucas_Cavalcanti

o recursive tem que estar antes do exclude… o recursive remove todos os excludes anteriores.

Robert.c.a

Hum… essa eu não sabia, modifiquei, mesmo erro.
Por fim eu fiz

e ai funcionou. Agora não sei qual é pior, se com os includes ou com os excludes hehehe

De todo modo, obrigado pela ajuda, vou continuar minha saga Vraptor.

Criado 20 de agosto de 2012
Ultima resposta 21 de ago. de 2012
Respostas 9
Participantes 4