Index: src/test/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java =================================================================== --- src/test/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java (revision 908295) +++ src/test/org/apache/hadoop/hbase/io/TestHbaseObjectWritable.java (working copy) @@ -25,6 +25,8 @@ import java.io.DataOutputStream; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import junit.framework.TestCase; @@ -33,6 +35,7 @@ import org.apache.hadoop.hbase.filter.PrefixFilter; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.WritableComparator; +import org.junit.Assert; public class TestHbaseObjectWritable extends TestCase { @@ -74,6 +77,14 @@ // Do 'known' Writable type. obj = doType(conf, new Text(""), Text.class); assertTrue(obj instanceof Text); + //List.class + List list = new ArrayList(); + list.add("hello"); + list.add("world"); + list.add("universe"); + obj = doType(conf, list, List.class); + assertTrue(obj instanceof List); + Assert.assertArrayEquals(list.toArray(), ((List)obj).toArray() ); // Check that filters can be serialized obj = doType(conf, new PrefixFilter(HConstants.EMPTY_BYTE_ARRAY), PrefixFilter.class); @@ -94,4 +105,5 @@ dis.close(); return product; } + } \ No newline at end of file Index: src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java =================================================================== --- src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java (revision 908295) +++ src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java (working copy) @@ -22,7 +22,11 @@ import java.io.DataOutput; import java.io.IOException; import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; @@ -156,6 +160,9 @@ addToMap(HLog.Entry.class, code++); addToMap(HLog.Entry[].class, code++); addToMap(HLogKey.class, code++); + + // List + addToMap(List.class, code++); } private Class declaredClass; @@ -299,6 +306,14 @@ declClass.getComponentType(), conf); } } + } else if (declClass == List.class) { + List list = (List)instanceObj; + int length = list.size(); + out.writeInt(length); + for (int i = 0; i < length; i++) { + writeObject(out, list.get(i), + list.get(i).getClass(), conf); + } } else if (declClass == String.class) { // String Text.writeString(out, (String)instanceObj); } else if (declClass.isPrimitive()) { // primitive type @@ -402,6 +417,12 @@ Array.set(instance, i, readObject(in, conf)); } } + } else if (declaredClass == List.class) { // List + int length = in.readInt(); + instance = new ArrayList(length); + for (int i = 0; i < length; i++) { + ((ArrayList)instance).add(readObject(in, conf)); + } } else if (declaredClass == String.class) { // String instance = Text.readString(in); } else if (declaredClass.isEnum()) { // enum