From 2bbc95823ca1e8aca4004cb4ac3bd53400cf73d9 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Wed, 30 May 2012 17:55:58 +0000 Subject: [PATCH] HBASE-6049 Serializing 'List' containing null elements will cause NullPointerException in HbaseObjectWritable.writeObject() git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1344363 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/hadoop/hbase/io/HbaseObjectWritable.java | 5 +++-- .../apache/hadoop/hbase/io/TestHbaseObjectWritable.java | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java index 35b2c8b01cd..e19af32ba64 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java @@ -477,8 +477,9 @@ public class HbaseObjectWritable implements Writable, WritableWithSize, Configur int length = list.size(); out.writeInt(length); for (int i = 0; i < length; i++) { - writeObject(out, list.get(i), - list.get(i).getClass(), conf); + Object elem = list.get(i); + writeObject(out, elem, + elem == null ? Writable.class : elem.getClass(), conf); } } else if (declClass == String.class) { // String Text.writeString(out, (String)instanceObj); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java index d8e3ee1709b..2e666668d63 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java @@ -198,6 +198,14 @@ public class TestHbaseObjectWritable extends TestCase { obj = doType(conf, list, List.class); assertTrue(obj instanceof List); Assert.assertArrayEquals(list.toArray(), ((List)obj).toArray() ); + //List.class with null values + List listWithNulls = new ArrayList(); + listWithNulls.add("hello"); + listWithNulls.add("world"); + listWithNulls.add(null); + obj = doType(conf, listWithNulls, List.class); + assertTrue(obj instanceof List); + Assert.assertArrayEquals(listWithNulls.toArray(), ((List)obj).toArray() ); //ArrayList.class ArrayList arr = new ArrayList(); arr.add("hello");