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

Scott Carey commented on AVRO-387:
----------------------------------

bq. Here's a patch that adds a new interface, IndexedRecord, that's used by 
both specific and generic, so that toString() and hashCode() implementations 
can be shared. The SpecificRecord interface is retained only as a marker. 
Should we remove this altogether?

I like this approach.  My preference in general it is to remove an empty 
interface.  Converting my code to change SpecificRecord to IndexedRecord is a 
trivial thing to do.  But I have a suspicion that we'll have a need to add to 
the SpecificRecord interface at some point.  
Maybe SpecificRecordBase should just be renamed SpecificRecord and changed to 
implement IndexedRecord?  I think that wouldn't break any of my client code 
currently referencing the SpecificRecord interface.

> hashCode throws a NullPointerException when unions are uninitialized
> --------------------------------------------------------------------
>
>                 Key: AVRO-387
>                 URL: https://issues.apache.org/jira/browse/AVRO-387
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.2.0
>            Reporter: Michael Armbrust
>            Priority: Minor
>         Attachments: AVRO-387.patch, AVRO-387.patch, AVRO-387.patch.txt
>
>
> This is a very similar issue to AVRO-382, except this time it happens for 
> uninitialized unions instead of primitive fields.  Once again, this makes it 
> very difficult to use avro from the scala console.
> Stacktrace:
> {noformat}
> org.apache.avro.AvroRuntimeException: Not in union 
> [{"type":"record","name":"GetRequest","namespace":"edu.berkeley.cs.scads.comm","fields":[{"name":"namespace","type":"string"},{"name":"key","type":"bytes"}]}]:
>  null
>       at 
> org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:339)
>       at org.apache.avro.generic.GenericData.hashCode(GenericData.java:429)
>       at org.apache.avro.specific.SpecificData.hashCode(SpecificData.java:227)
>       at org.apache.avro.generic.GenericData.hashCodeAdd(GenericData.java:439)
>       at org.apache.avro.specific.SpecificData.hashCode(SpecificData.java:223)
>       at 
> org.apache.avro.specific.SpecificRecordBase.hashCode(SpecificRecordBase.java:52)
>       at java.lang.Object.toString(Object.java:219)
>       at scala.runtime.ScalaRunTime$.stringOf(ScalaRunTime.scala:165)
>       at RequestResult$.<init>(<console>:4)
>       at RequestResult$.<clinit>(<console>)
>       at RequestResult$result(<console>)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at scala.tools.nsc.Interpreter$Request.loadAndRun(Interpreter.scala:889)
>       at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:508)
>       at 
> scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:242)
>       at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:230)
>       at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:142)
>       at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:298)
>       at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:141)
>       at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
> {noformat}

-- 
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