[ 
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)

Reply via email to