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

Thiruvalluvan M. G. updated AVRO-1763:
--------------------------------------
    Component/s: spec

> Avro Schema Generator to handle polymorphic types
> -------------------------------------------------
>
>                 Key: AVRO-1763
>                 URL: https://issues.apache.org/jira/browse/AVRO-1763
>             Project: Apache Avro
>          Issue Type: Improvement
>          Components: spec
>    Affects Versions: 1.9.0
>            Reporter: Qiangqiang Shi
>            Priority: Major
>
> Inheritance and polymorphism are widely used in Java libraries. If multiple 
> sophisticated Avro schema generator can be added to Avro, users can generate 
> Avro schema easily for classes in complex context, third-party code and 
> legacy code.
> For example, for the following class:
> {code:java}
> public class TestReflectPolymorphismData {
> {
> public static class SuperclassA1 {
>     private String SuperclassA1;
>   }
>   public static class SubclassA1 extends SuperclassA1 {
>     private String SubclassA1;
>   }
>   public static class SubclassA2 extends SuperclassA1 {
>     private String SubclassA2;
>   }
> public static class SuperB1 {
>     private SubclassA1 SubclassA1;
>     private List<SubclassA2> SubclassA2List;
>     private Map<String, SuperclassA1> stringSuperclassA1Map;
>     private Map<Integer, SuperclassA1> integerSuperclassA1Map;
>   }
> }
> }
> {code}
> It'll be good if Avro can provide a schema generator to generate a schema 
> like the following automatically for class SuperB1 :
> {code:java}
> {
>   "type": "record",
>   "name": "SuperB1",
>   "namespace": "org.apache.avro.reflect.TestReflectPolymorphismData$",
>   "fields": [
>     {
>       "name": "SubclassA1",
>       "type": {
>         "type": "record",
>         "name": "SuperclassA1",
>         "fields": [
>           {
>             "name": "SuperclassA1",
>             "type": "string"
>           },
>           {
>             "name": "SuperclassA1Subclasses",
>             "type": [
>               "null",
>               {
>                 "type": "record",
>                 "name": "SubclassA1",
>                 "fields": [
>                   {
>                     "name": "SubclassA1",
>                     "type": "string"
>                   }
>                 ]
>               },
>               {
>                 "type": "record",
>                 "name": "SubclassA2",
>                 "fields": [
>                   {
>                     "name": "SubclassA2",
>                     "type": "string"
>                   }
>                 ]
>               }
>             ]
>           }
>         ]
>       }
>     },
>     {
>       "name": "SubclassA2List",
>       "type": {
>         "type": "array",
>         "items": "SuperclassA1",
>         "java-class": "java.util.List"
>       }
>     },
>     {
>       "name": "stringSuperclassA1Map",
>       "type": {
>         "type": "map",
>         "values": "SuperclassA1"
>       }
>     },
>     {
>       "name": "integerSuperclassA1Map",
>       "type": {
>         "type": "array",
>         "items": {
>           "type": "record",
>           "name": "Pair34255fab6d3d79ff",
>           "namespace": "org.apache.avro.reflect",
>           "fields": [
>             {
>               "name": "key",
>               "type": "int"
>             },
>             {
>               "name": "value",
>               "type": 
> "org.apache.avro.reflect.TestReflectPolymorphismData$.SuperclassA1"
>             }
>           ]
>         },
>         "java-class": "java.util.Map"
>       }
>     }
>   ]
> }
> {code}
> related story: AVRO-1568



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to