[ 
https://issues.apache.org/jira/browse/AVRO-2449?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jeff updated AVRO-2449:
-----------------------
    Affects Version/s: 1.9.1

> Velocity Templates do not allow for Jackson unmarhsalling to JSON
> -----------------------------------------------------------------
>
>                 Key: AVRO-2449
>                 URL: https://issues.apache.org/jira/browse/AVRO-2449
>             Project: Apache Avro
>          Issue Type: Improvement
>          Components: java
>    Affects Versions: 1.9.0, 1.9.1
>            Reporter: Jeff
>            Priority: Minor
>
> *This applies to working in Kotlin* _Havent tested in java_
> When using java classes auto-generated by the Avro-tools or the Gradle tasks 
> (in my case) the output classes are not out of the box compatible with 
> serializing to JSON.
> I detailed my issues in this stack post: 
> [https://stackoverflow.com/questions/56742226/avro-generated-class-issue-with-json-conversion-kotlin]
> Specifically it appears that the two calls:
>   
> {code:java}
> public org.apache.avro.specific.SpecificData getSpecificData() { return 
> MODEL$; }
> public org.apache.avro.Schema getSchema() { return SCHEMA$; }
> {code}
>  
> Are at issue - when I attempt to convert one of these records into Json using 
> ObjectMapper.
> So there are two approaches I've come up with:
> 1) To create a Mixin for Jackson:
> {code:java}
> abstract class AvroMixIn {
>     @JsonIgnore
>     abstract fun getSchema(): org.apache.avro.Schema
>     @JsonIgnore
>     abstract fun getSpecificData() : org.apache.avro.specific.SpecificData
> }{code}
>  And then I can apply this to the objet mapper (in a lazy way to all objects)
> {code:java}
> // Register the global object mapper to use the java time module (i think 
> this is done elsewhere already) and to use the mixin to make it easy to 
> jackson decode Avro stuff
> objectMapper
>     .registerModule(JavaTimeModule())
>     .addMixIn(Object::class.java, AvroMixIn::class.java)
> {code}
> The alternative would be to modify the velocity templates (which I also did) 
> to add a
> {code:java}
> @com.fasterxml.jackson.annotation.JsonIgnore
> {code}
> annotation in front of the *getSpecificData* and *getSchema* calls
>  
> As I'm pretty sure Jackson is a dependency of this project I'm wondering if 
> its a reasonable consideration to modify the templates to add the 
> *@JsonIgnore* annotation to make it easy to serailize/unserialze data right 
> out of the box.
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to