Description
The following reasonable code:
DatumReader<Test> reader = new SpecificDatumReader<Test>(Test.class); DataFileReader<Test> dataFileReader = new DataFileReader<Test>(file, reader); Test datum = null; while(dataFileReader.hasNext()) { datum = dataFileReader.next(datum); System.out.println(datum); }
Can result in a runtime exception:
$ java -cp avro-1.7.3.jar:$(hadoop classpath) org.apache.hadoop.util.RunJar target/avro-example-1.0-jar-with-dependencies.jar Sample target/test-file Exception in thread "main" java.lang.ClassCastException: org.apache.avro.generic.GenericData$Record cannot be cast to Test at Sample.main(Sample.java:27) 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 org.apache.hadoop.util.RunJar.main(RunJar.java:208)
when the jar containing the specific class (Test in my example) is loaded from a different classloader than the avro jar itself. This occurs when run via the hadoop jar command but could occur in web containers or other locations as well.
Attachments
Attachments
Issue Links
- relates to
-
AVRO-1103 New AvroDeserializer should Locate Appropriate Classloader
- Closed