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
This commit is contained in:
Michael Stack 2012-05-30 17:55:58 +00:00
parent 20bd3f02d0
commit 2bbc95823c
2 changed files with 11 additions and 2 deletions

View File

@ -477,8 +477,9 @@ public class HbaseObjectWritable implements Writable, WritableWithSize, Configur
int length = list.size(); int length = list.size();
out.writeInt(length); out.writeInt(length);
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
writeObject(out, list.get(i), Object elem = list.get(i);
list.get(i).getClass(), conf); writeObject(out, elem,
elem == null ? Writable.class : elem.getClass(), conf);
} }
} else if (declClass == String.class) { // String } else if (declClass == String.class) { // String
Text.writeString(out, (String)instanceObj); Text.writeString(out, (String)instanceObj);

View File

@ -198,6 +198,14 @@ public class TestHbaseObjectWritable extends TestCase {
obj = doType(conf, list, List.class); obj = doType(conf, list, List.class);
assertTrue(obj instanceof List); assertTrue(obj instanceof List);
Assert.assertArrayEquals(list.toArray(), ((List)obj).toArray() ); Assert.assertArrayEquals(list.toArray(), ((List)obj).toArray() );
//List.class with null values
List<String> listWithNulls = new ArrayList<String>();
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.class
ArrayList<String> arr = new ArrayList<String>(); ArrayList<String> arr = new ArrayList<String>();
arr.add("hello"); arr.add("hello");