Possuo um serviço WEB funcionando e o método GET está retornando um XML conforme o esperado, porém se eu alterar o @Produces({“application/xml”) para @Produces({“application/json”) dá o seguinte erro:
org.codehaus.jackson.map.JsonMappingException: Direct self-reference leading to cycle (through reference chain: java.util.Vector[0]->entities.Produtos["categoriasId"]->entities.Categorias["categorias"])
Alguém já passou por isso?
Valeu!
Qual implementação JAX-RS você está utilizando?
OK. Você tem duas opções:
- Trocar o provedor JSON para um que você sabe que suporta referências cíclicas (não tenho certeza, mas acho que o jettison suporta);
- Escrever o seu próprio provedor.
Escolha uma 
Se eu quisesse optar pela primeira opção, como exatamente eu faria essa troca?
obrigado.
[quote=jmountain]Se eu quisesse optar pela primeira opção, como exatamente eu faria essa troca?
obrigado.[/quote]
Tira o jackson do classpath e coloca o jar do jettison.
Obrigado pela dica @asaudate
Só uma coisa que eu não entendi…
Enquanto meu serviço não precisava retornar dados relacionados o formato JSON funcionava perfeitamente, porém começou a dar erro após eu relacionar as entidades, em JSON eu não consegui mais, somente XML.
Se essa informção servir para alguma coisa, ta aí!
[quote=jmountain]Só uma coisa que eu não entendi…
Enquanto meu serviço não precisava retornar dados relacionados o formato JSON funcionava perfeitamente, porém começou a dar erro após eu relacionar as entidades, em JSON eu não consegui mais, somente XML.
Se essa informção servir para alguma coisa, ta aí![/quote]
A exceção que estava dando era por causa de (possíveis) ciclos entre as entidades. A biblioteca que você estava usando não consegue lidar com esses ciclos.
Sim, quanto as excesões de ciclo eu resolvi assim:
- Implementei a interface CycleRecoverable
- Sobrescrevi o método onCycleDetected e resolveu, segue:
public class Categorias implements Serializable,CycleRecoverable {
.
.
.
.
@Override
public Object onCycleDetected(Context cntxt) {
Categorias categoria = new Categorias(this.categoriasId);
return categoria;
}
}//fim classe Categorias
Mas a partir daí eu só consigo exibir XML, JSON não consigo mais exibir, aí você me propôs tirar o jackson do classpath e coloca o jar do jettison.
Bem, minha dúvida é de como fazer isso. :oops: