[ 
https://issues.apache.org/jira/browse/GROOVY-7682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15275507#comment-15275507
 ] 

Andre Steingress commented on GROOVY-7682:
------------------------------------------

Thanks for the fast feedback, John.

{quote}
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.
{quote}

I also thought about that, however, it seemed to introduce vast complexity and, 
to be honest, I wasn't even sure this can cover all the cases that can come up 
(e.g. an object is part of a list and later on the same object is part of a 
property - there would be the need to determine the rendering order or some way 
to reference the list object in JSON?), so property exclusions sounded much 
easier (when the disadvantages can be accepted) and provided some additional 
benefits.

Anyone else has some feedback or should I keep going into the proposed 
direction?

> 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