From aff964c58b23e3b99116fa2e683f28f36334363e Mon Sep 17 00:00:00 2001 From: Muga Nishizawa Date: Sun, 12 Dec 2010 00:48:31 +0900 Subject: [PATCH] java: fixed a bug within CollectionTemplate.java --- .../msgpack/template/CollectionTemplate.java | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/java/src/main/java/org/msgpack/template/CollectionTemplate.java b/java/src/main/java/org/msgpack/template/CollectionTemplate.java index b88500c3..31a937ef 100644 --- a/java/src/main/java/org/msgpack/template/CollectionTemplate.java +++ b/java/src/main/java/org/msgpack/template/CollectionTemplate.java @@ -18,10 +18,14 @@ package org.msgpack.template; import java.util.Collection; -import java.util.List; import java.util.LinkedList; import java.io.IOException; -import org.msgpack.*; + +import org.msgpack.MessagePackObject; +import org.msgpack.MessageTypeException; +import org.msgpack.Packer; +import org.msgpack.Template; +import org.msgpack.Unpacker; public class CollectionTemplate implements Template { public static void load() { } @@ -32,47 +36,53 @@ public class CollectionTemplate implements Template { this.elementTemplate = elementTemplate; } + @SuppressWarnings("unchecked") public void pack(Packer pk, Object target) throws IOException { - if(!(target instanceof Collection)) { - throw new MessageTypeException(); + if (! (target instanceof Collection)) { + if (target == null) { + throw new MessageTypeException(new NullPointerException("target is null.")); + } + throw new MessageTypeException("target is not Collection type: " + target.getClass()); } - Collection collection = (Collection)target; + Collection collection = (Collection) target; pk.packArray(collection.size()); for(Object element : collection) { elementTemplate.pack(pk, element); } } + @SuppressWarnings("unchecked") public Object unpack(Unpacker pac, Object to) throws IOException, MessageTypeException { int length = pac.unpackArray(); - List list; + Collection c; if(to == null) { - list = new LinkedList(); + c = new LinkedList(); } else { // TODO: optimize if list is instanceof ArrayList - list = (List)to; - list.clear(); + c = (Collection) to; + c.clear(); } for(; length > 0; length--) { - list.add( elementTemplate.unpack(pac, null) ); + c.add(elementTemplate.unpack(pac, null)); } - return list; + return c; } + @SuppressWarnings("unchecked") public Object convert(MessagePackObject from, Object to) throws MessageTypeException { MessagePackObject[] array = from.asArray(); - List list; + Collection c; if(to == null) { - list = new LinkedList(); + c = new LinkedList(); } else { // TODO: optimize if list is instanceof ArrayList - list = (List)to; - list.clear(); + c = (Collection) to; + c.clear(); } for(MessagePackObject element : array) { - list.add( elementTemplate.convert(element, null) ); + c.add(elementTemplate.convert(element, null)); } - return list; + return c; } static {