2010-06-23 6 views
0

J'essaie de convertir une classe de domaine en JSON.Convertisseur JSON - débordement de pile

def converter = null 
try{ 
    converter = events as JSON 
} catch(e) { 
    log.error "error during conversion to JSON" 
    log.error e 
} 
return converter.toString() 

Je reçois toujours cette erreur:

org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [findEvents] of controller 
[com.geoadapta.geodata.DataAccessJsonController] caused exception: 
java.lang.StackOverflowError 
     at java.lang.Thread.run(Thread.java:619) 
    Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.StackOverflowError 
     ... 1 more 
    Caused by: java.lang.StackOverflowError 
     at org.codehaus.groovy.util.AbstractConcurrentMap.getOrPut(AbstractConcurrentMap.java:20) 
     at grails.converters.JSON.value(JSON.java:188) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
    // hundreds of times 
     at grails.converters.JSON.value(JSON.java:192) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
     at grails.converters.JSON.convertAnother(JSON.java:160) 
     at grails.converters.JSON.value(JSON.java:192) 
    2010-06-23 16:21:28,390 [http-8080-1] DEBUG [/GeoAdaptaApp].[grails] - Disabling the response for futher output 

C'est la classe de domaine: http://www.copypastecode.com/31527 Le seul problème que je vois est la référence « contexte ». Mais même si je mets à 'null', je reçois toujours le débordement de la pile.

Mon convertisseur ne propage pas de références circulaires. Je voudrais le déboguer et trouver quelle propriété est la cause du problème, mais pas de chance jusqu'à présent. Des indices?

Vive

+0

Quelle version de Grails? – ataylor

+0

Avez-vous essayé d'utiliser le convertisseur JSON "profond"? –

Répondre

1

Désolé, préféreraient ajouter cela comme un commentaire, mais ne pas le représentant d'ajouter encore de commentaires.

Dans votre classe de domaine, il semble qu'il y ait plusieurs classes qui s'étendent de celle-ci, comment peupler l'objet 'events'? Puisque vous dites que le contexte est défini sur null et que c'est la seule relation qui est définie directement, une liste de sous-classes inattendues dans vos résultats est un moyen qui vous vient à l'esprit pour savoir comment vous pourriez entrer dans un scénario de récursion aussi profond.

Pour contourner le problème immédiat afin que vous puissiez faire du débogage, avez-vous essayé d'appeler:

converter.setRenderDomainClassRelations(false) 
+0

Voilà ce que j'ai: Message d'exception: Aucune signature de méthode: static grails.converters.JSON.setRenderDomainClassRelations() est applicable pour les types d'argument: (java.lang.Boolean) valeurs: [false] – Mulone

Questions connexes