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