[ https://issues.apache.org/jira/browse/GROOVY-7682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15030795#comment-15030795 ]
John Wagenleitner commented on GROOVY-7682: ------------------------------------------- Looks like this is caused by [{{DateTime#getZone}}|http://joda-time.sourceforge.net/apidocs/org/joda/time/base/AbstractInstant.html#getZone()] that returns a {{DateTimeZone}}. This creates a cycle when it tries to serialize the [{{DateTimeZone#getDefault}}|http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTimeZone.html#getDefault()] property which returns the same type. The following will reproduce the stackoverflow: {code} import groovy.json.JsonOutput class Foo { private static final DEFAULT = new Foo('The Foo') private final String name Foo(String name) { this.name = name } String getName() { return name } static Foo getDefault() { return DEFAULT } } JsonOutput.toJson( new Foo('test foo') ) {code} > 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)