SpecificDatumWriter is using GenericData.resolveUnion sometimes
---------------------------------------------------------------

                 Key: AVRO-717
                 URL: https://issues.apache.org/jira/browse/AVRO-717
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.4.1
         Environment: Mac, Java 6.
            Reporter: Joe Crobak


From: 
[avro-user|http://mail-archives.apache.org/mod_mbox/avro-user/201012.mbox/%[email protected]%3e]

I've tried to use union of null and the enum-type, but I've run into an issue 
with this approach when using the AvroOutputFormat.  The following code 
summarizes my issue:
{code}
   public void testDataWriteWithSchema() throws IOException {
     final DataFileWriter<Event writer =
       new DataFileWriter<Event>(new SpecificDatumWriter<Event>());

     writer.create(Event.SCHEMA$, new File("target/datafile-test.avro"));
     writer.append(getEvent());
     writer.close();
   }

   public void testDataWriteWithSchemaWithClass() throws IOException {
     final DataFileWriter<Event writer =
       new DataFileWriter<Event>(new SpecificDatumWriter<Event>(Event.class));

     writer.create(Event.SCHEMA$, new File("target/datafile-test.avro"));
     writer.append(getEvent());
     writer.close();
   }
{code}


 When I don't pass in the Event.class to SpecificDatumWriter (the first test 
method), the above test fails with the following exception:
{noformat}
 Not in union ["null", 
{"type":"enum","name":"Suit","namespace":"foo","symbols":["SPADES","CLUBS","HEARS","DIAMONDS"]}]:
 SPADES
 at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:382)
 at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
 at 
org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:100)
 at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62)
 at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:54)
 at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:245)
{noformat}

Scott Carey's reply:

{quote}
This looks like a bug.  Can you file a ticket?  In the first case, the 
constructor is not
initializing the SpecificData object, which means that it is using 
GenericData.resolveUnion()
instead of SpecificData.resolveUnion(). 

The empty param constructor in SpecificDatumWriter should be
public SpecificDatumWriter() \{ super(SpecificData.get()); }


public SpecificDatumWriter() { }
{quote}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to