avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Teemu Kanstrén <tkanst...@gmail.com>
Subject Re: Java code generation for nested non-optional records
Date Fri, 21 Aug 2015 16:28:50 GMT
Thanks! This works. So it was the extra [] left over from the optional
definition.

These schemas keep confusing me with all the combinations and braces.. :)

On 21 August 2015 at 18:28, Prajwal Tuladhar <praj@infynyxx.com> wrote:

> How about?
>
> {
>   "namespace": "avrò.test",
>   "type": "record",
>   "name": "TopObj",
>   "fields": [
>     {
>       "name": "inner1",
>       "type": {
>         "name": "Inner1",
>         "type": "record",
>         "fields": [
>           {
>             "name": "value1",
>             "type": "string"
>           },
>           {
>             "name": "value2",
>             "type": "string"
>           }
>         ]
>       }
>     },
>     {
>       "name": "inner2",
>       "type": [
>         {
>           "type": "record",
>           "name": "Inner2",
>           "fields": [
>             {
>               "name": "value3",
>               "type": "string"
>             },
>             {
>               "name": "value4",
>               "type": "string"
>             }
>           ]
>         },
>         "null"
>       ]
>     }
>   ]
> }
>
>
> On Fri, Aug 21, 2015 at 3:00 PM, Teemu Kanstrén <tkanstren@gmail.com>
> wrote:
>
>> Hello all,
>>
>>  I am using the Maven Avro compiler to generate Java code for my Avro
>> schemas. Problem. If I have a nested record which is optional, everything
>> generates OK. If the type is not optional, the generated reference is set
>> to generic Object type and I cannot use it. What might I be doing wrong?
>>
>>  Example schema:
>>
>> {
>>   "namespace": "avro.test",
>>   "type": "record",
>>   "name": "TopObj",
>>   "fields": [
>>     {"name": "inner1", "type": [
>>       {"type": "record", "name": "Inner1",
>>         "fields": [
>>           {"name": "value1", "type": "string"},
>>           {"name": "value2", "type": "string"}
>>         ]
>>       }]
>>     },
>>     {"name": "inner2", "type": [
>>       {"type": "record", "name": "Inner2",
>>         "fields": [
>>           {"name": "value3", "type": "string"},
>>           {"name": "value4", "type": "string"}
>>          ]
>>       }, "null"]
>>     }
>>   ]
>> }
>>
>> Running the Avro Java code generator for this produces three classes as expected:
TopObj, Inner1 and Inner2. However, in TopObject, the definitions are as:
>>
>> @Deprecated public java.lang.Object inner1;
>> @Deprecated public avro.test.Inner2 inner2;
>>
>> If I set inner1 as optional (add the , "null" to it) the type also becomes Inner1
in TopObj, which is as I would expect. But I do not want it to be optional.
>>
>> How do I get inner1 to generate as type Inner1 in TopObj?
>>
>> Cheers & thanks,
>>
>> Teemu
>>
>>
>
>
> --
> --
> Cheers,
> Praj
>

Mime
View raw message