[
https://issues.apache.org/jira/browse/AVRO-1571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108076#comment-14108076
]
Sachin Goyal commented on AVRO-1571:
------------------------------------
If we pass an obj of type 'ParentContext' to ReflectData#createSchema() (and
couple of their downstream functions), following schema can be generated.
{code:javascript}
{
"type" : "record",
"name" : "ParameterTypes",
"namespace" : "org.apache.avro.reflect",
"fields" : [ {
"name" : "m1",
"type" : {
"type" : "record", "name" : "Master1",
"fields" : [ {
"name" : "foo",
"type" : {
"type" : "record", "name" : "Foo10b2274d0c76a664",
"fields" : [ {"name" : "p","type" : "int"}, {"name" : "q", "type" :
"long"} ]
} } ] }
}, {
"name" : "m2",
"type" : {
"type" : "record", "name" : "Master2",
"fields" : [ {
"name" : "foo",
"type" : {
"type" : "record", "name" : "Foo20f193d415184f4e",
"fields" : [ {"name" : "p","type" : "string"}, {"name" : "q", "type"
: "string"} ]
} } ] }
}, {
"name" : "m3",
"type" : {
"type" : "record", "name" : "Master31830bfd9460d8d21",
"fields" : [ {
"name" : "foo",
"type" : {
"type" : "record", "name" : "Foo14b15d58d3be921d",
"fields" : [ {"name" : "p","type" : "int"}, {"name" : "q", "type" :
"int"} ]
} } ] }
} ]
}
{code}
\\
Note that:
# The record Foo might need to have its name mangled as clazz.getSimpleName() +
Hash64 (param-names)
# When serializing the actual object, the same ParentConext would need to be
passed along the write calls as well.
\\
\\
> Support parameterized types in Avro
> -----------------------------------
>
> Key: AVRO-1571
> URL: https://issues.apache.org/jira/browse/AVRO-1571
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.7.6
> Reporter: Sachin Goyal
>
> The below code cannot be serialized by Avro.
> {code}
> class ParameterTypes {
> Master1 m1;
> Master2 m2;
> Master3<Integer> m3;
> }
> class Foo <P, Q> {
> P p;
> Q q;
> }
> class Master1 {
> Foo <Integer, Long> foo;
> }
> class Master2 {
> Foo <String, String> foo;
> }
> class Master3 <P> {
> Foo <P, P> foo;
> }
> {code}
> This is because when generating the schema, only the current class is used to
> generate the schema. The parent class' context is missing in
> ReflectData#createSchema() functions where the actual type-information is
> present.
--
This message was sent by Atlassian JIRA
(v6.2#6252)