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

Ryan Blue commented on AVRO-1568:
---------------------------------

[~sachingoyal], I've been thinking about this issue lately and whether the use 
case would be covered by the logical types conversions. If it were, then you'd 
be able to set both the conversion from a third-party object and specifically 
set its schema. What I like about that way to handle this is that it uses the 
public API of the third party object, which would be less likely to have 
problems as that code changes. Using reflection to save the fields of a 
third-party object violates that object's guarantees by going directly to its 
private data, but relying on its API has some compatibility guarantees. Of 
course, the drawback is that you are responsible for maintaining the conversion.

What do you think?

Also, I took a look at the PR and the main thing I see is that it has two 
{{setSchema}} methods. Why not get the class from of the {{Field}} and use that 
instead of tying serialization to both type and reference location?

> Allow Java polymorphism in Avro for third-party code
> ----------------------------------------------------
>
>                 Key: AVRO-1568
>                 URL: https://issues.apache.org/jira/browse/AVRO-1568
>             Project: Avro
>          Issue Type: Improvement
>    Affects Versions: 1.7.6
>            Reporter: Sachin Goyal
>
> A large number of Java designs interacting with databases with 
> Hibernate/Couchbase (perhaps, even otherwise) have Java polymorphism of the 
> form:
> {code:java}
> class Base 
> {
>    Integer a = 5;
> }
> class Derived extends Base
> {
>     String b = "Foo";
> }
> class PolymorphicDO
> {
>    Base b = new Derived();
> }
> {code}
> Jackson handles this kind of field by using annotations such as:
> {code}
> @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = 
> JsonTypeInfo.As.PROPERTY, property = "@class”)
> {code}
> If such a thing can be added to Avro, all those Java designs could become 
> immediately usable with Avro. They would also become Hadoop compatible due to 
> AvroSerde.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to