Browse Source

HADOOP-8566. AvroReflectSerializer.accept(Class) throws a NPE if the class has no package (primitive types and arrays). (tucu)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1358454 13f79535-47bb-0310-9956-ffa450edef68
Alejandro Abdelnur 13 years ago
parent
commit
0a2252bdda

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -313,6 +313,9 @@ Branch-2 ( Unreleased changes )
     HADOOP-8563. don't package hadoop-pipes examples/bin
     (Colin Patrick McCabe via tgraves)
 
+    HADOOP-8566. AvroReflectSerializer.accept(Class) throws a NPE if the class has no 
+    package (primitive types and arrays). (tucu)
+
   BREAKDOWN OF HDFS-3042 SUBTASKS
 
     HADOOP-8220. ZKFailoverController doesn't handle failure to become active

+ 2 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/serializer/avro/AvroReflectSerialization.java

@@ -58,8 +58,8 @@ public class AvroReflectSerialization extends AvroSerialization<Object>{
     if (packages == null) {
       getPackages();
     }
-    return AvroReflectSerializable.class.isAssignableFrom(c) || 
-      packages.contains(c.getPackage().getName());
+    return AvroReflectSerializable.class.isAssignableFrom(c) ||
+      (c.getPackage() != null && packages.contains(c.getPackage().getName()));
   }
 
   private void getPackages() {

+ 7 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/TestAvroSerialization.java

@@ -21,6 +21,7 @@ package org.apache.hadoop.io.serializer.avro;
 import junit.framework.TestCase;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.io.serializer.SerializationFactory;
 import org.apache.hadoop.io.serializer.SerializationTestUtil;
 
 public class TestAvroSerialization extends TestCase {
@@ -43,6 +44,12 @@ public class TestAvroSerialization extends TestCase {
     assertEquals(before, after);
   }
 
+  public void testAcceptHandlingPrimitivesAndArrays() throws Exception {
+    SerializationFactory factory = new SerializationFactory(conf);
+    assertNull(factory.getSerializer(byte[].class));
+    assertNull(factory.getSerializer(byte.class));
+  }
+
   public void testReflectInnerClass() throws Exception {
     InnerRecord before = new InnerRecord();
     before.x = 10;