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

Will Gorman commented on AVRO-1512:
-----------------------------------

The third option was also the approach I had tried as a temporary workaround. 
The only problem I can see is if Java classes were compiled by Avro from the 
schema obtained from the Thrift class. In that case the record created from the 
Thrift union would allow multiple fields to be set and data serialized from the 
Avro class couldn't always be deserialized back into the Thrift class.  I think 
that still feels preferable to only supporting unions that don't have multiple 
branches of the same type though.

> Error serializing TUnion with avro-thrift
> -----------------------------------------
>
>                 Key: AVRO-1512
>                 URL: https://issues.apache.org/jira/browse/AVRO-1512
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.7.6
>            Reporter: Will Gorman
>            Assignee: Doug Cutting
>             Fix For: 1.7.7
>
>         Attachments: AVRO-1512.patch, test.thrift
>
>
> Attempting to serialize a Thrift union type (TUnion) with avro-thrift 
> produces an error like the following:
> {noformat}
> org.apache.avro.AvroRuntimeException: Unknown datum type 
> org.apache.avro.thrift.test.FooOrBar: <FooOrBar foo:foo>
>       at 
> org.apache.avro.generic.GenericData.getSchemaName(GenericData.java:639)
>       at 
> org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:604)
>       at 
> org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:151)
>       at 
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:71)
>       at 
> org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)
>       at 
> org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
>       at 
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)
>       at 
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)
>       at org.apache.avro.thrift.TestThrift.check(TestThrift.java:83)
>       at org.apache.avro.thrift.TestThrift.testStruct(TestThrift.java:60)
> {noformat}
> Upon investigation it appears that ThriftData#isRecord intentionally does not 
> accept TUnion types as Avro records and so GenericData is unable to determine 
> an Avro type for the datum.  However, ThriftData#getSchema does generate an 
> Avro record schema for Thrift union types.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to