[ https://issues.apache.org/jira/browse/GROOVY-7682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15275386#comment-15275386 ]
John Wagenleitner commented on GROOVY-7682: ------------------------------------------- I think that approach would be good, while it may not directly solve the StackOverflow it's probably a feature that would helpful (similar to GROOVY-6699) to have and at least indirectly could help as a workaround for the StackOverflow. I started on an approach using an IdentityHashMap to track which objects had already been serialized and just write some kind of reference id instead, but never quite finished. https://github.com/jwagenleitner/groovy/commit/673873d7b1828f849c8a4212cbaceaa9bd8175d2 > JsonBuilder or JsonOutput incompatible with JodaTime > ---------------------------------------------------- > > Key: GROOVY-7682 > URL: https://issues.apache.org/jira/browse/GROOVY-7682 > Project: Groovy > Issue Type: Bug > Components: JSON > Affects Versions: 2.4.5 > Environment: JVM: 1.8.0_65 (Oracle) > Mac OS X 10.11.1 (El Capitan) > Reporter: Jean-Philippe Pellerin > Labels: DateTime,, Json > > Using groovy's built-in methods to serialize Joda DateTime to JSON always > conclude in a {{StackOverflowError}}. > {code:title=ExampleMethod|type=java} > package com.mgd > import groovy.json.JsonOutput > import org.joda.time.DateTime > import org.joda.time.format.DateTimeFormat > import org.joda.time.format.DateTimeFormatter > import com.sun.beans.util.Cache.Kind.Strong > class JodaBugJson { > public static void main(String[] args) { > DateTimeFormatter formatter = > DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS z") > DateTime dt = formatter.parseDateTime("2015-11-20 13:37:21.123 > EST") > // String json = new JsonBuilder(dt).toString() > //same outcome > Strong json = JsonOutput.toJson(dt) > println "\n${json}\n" > } > } > {code} > Running the above will result in : > {code: title=Error} > Exception in thread "main" java.lang.StackOverflowError > at > org.codehaus.groovy.reflection.ClassInfo.getClassInfo(ClassInfo.java:119) > at > org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261) > at > org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:871) > at > org.codehaus.groovy.runtime.DefaultGroovyMethods.getMetaPropertyValues(DefaultGroovyMethods.java:364) > at > org.codehaus.groovy.runtime.DefaultGroovyMethods.getProperties(DefaultGroovyMethods.java:383) > at groovy.json.JsonOutput.writeObject(JsonOutput.java:290) > at groovy.json.JsonOutput.writeMap(JsonOutput.java:424) > at groovy.json.JsonOutput.writeObject(JsonOutput.java:294) > at groovy.json.JsonOutput.writeMap(JsonOutput.java:424) > at groovy.json.JsonOutput.writeObject(JsonOutput.java:294) > at groovy.json.JsonOutput.writeMap(JsonOutput.java:424) > ... > {code} > Whether this be only the date, or an object including a Joda DateTime the > outcome is the same. -- This message was sent by Atlassian JIRA (v6.3.4#6332)