Author: gk Date: Thu Mar 6 16:31:34 2014 New Revision: 1574950 URL: http://svn.apache.org/r1574950 Log: Update CollectionType Implementation and Tests.
Modified: turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/DefaultServiceTest.java turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java Modified: turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java?rev=1574950&r1=1574949&r2=1574950&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java (original) +++ turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java Thu Mar 6 16:31:34 2014 @@ -23,7 +23,7 @@ import java.text.DateFormat; import java.util.Collection; /** - * JsonService defines methods needed to serialize and deserialize and hepler + * This class defines methods needed to serialize and deserialize and helper * methos if needed. * * Some methods expect a class parameter. @@ -33,7 +33,7 @@ import java.util.Collection; * <code>Class clazz = Class.forName(className);</code> for the parameter. * * - * @author gk + * @author <a href="mailto:g...@apache.org">Georg Kallidis</a> * @version $Id$ */ public interface JsonService { @@ -90,7 +90,6 @@ public interface JsonService { * @param json * The JSON string to be deserialized * @param collectionType - * A collection object, which will be used to derive the collection type. * It could be just the collection or the typed collection. It may then be used to get the type for element type too. * Cft. implementation tests for more details (GSON). * @param elementType @@ -118,7 +117,7 @@ public interface JsonService { * The class to which the filtering should be applied * * @param refreshFilter - * refresh Filter (clean cache for this filerClass) + * refresh filter (clean cache for this filterClass) * * @param filterAttr * The class bean attributes which should be serialized @@ -141,7 +140,7 @@ public interface JsonService { * same class, just the filterAttributes get applied. If not the * class is filtered out, if found as a property type. * @param refreshFilter - * refresh Filter (clean cache for this filerClass) + * refresh filter (clean cache for this filterClass) * * @param filterAttr * The bean attributes which should not be serialized @@ -194,7 +193,7 @@ public interface JsonService { * The target class for this adapter * @param mixin * The adapter/mixin for the target object - * (serializer/deserializer) + * (module/serializer/deserializer) * * @return JsonService * Modified: turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/DefaultServiceTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/DefaultServiceTest.java?rev=1574950&r1=1574949&r2=1574950&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/DefaultServiceTest.java (original) +++ turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/DefaultServiceTest.java Thu Mar 6 16:31:34 2014 @@ -199,8 +199,7 @@ public class DefaultServiceTest extends rectList.add(filteredRect); } String adapterSer = sc.ser(rectList); - ArrayList<Rectangle> resultList0 = sc - .deSer(adapterSer, ArrayList.class); + ArrayList<Rectangle> resultList0 = sc.deSer(adapterSer, ArrayList.class); for (int i = 0; i < 10; i++) { assertEquals("deser reread size failed", (i * i), resultList0 .get(i).getSize()); Modified: turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java?rev=1574950&r1=1574949&r2=1574950&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java (original) +++ turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java Thu Mar 6 16:31:34 2014 @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; +import java.util.List; import java.util.Map; import org.apache.avalon.framework.activity.Initializable; @@ -43,6 +44,7 @@ import com.fasterxml.jackson.core.JsonPa import com.fasterxml.jackson.core.JsonParser.Feature; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -78,7 +80,7 @@ import com.fasterxml.jackson.databind.se * By setting the refresh parameter {@link #filter(Object, Class, FilterContext, boolean, String...)} on per-filter method call * you could filter a class providing different properties. * - * @author gk + * @author <a href="mailto:g...@apache.org">Georg Kallidis</a> * @version $Id$ * */ @@ -167,12 +169,7 @@ public class Jackson2MapperService exten .constructCollectionType(collectionClass, type)); } - @Override - public <T> Collection<T> deSerCollection(String json, Object collectionType, Class<T> type) - throws Exception { - return mapper.readValue(json, mapper.getTypeFactory() - .constructCollectionType(((Collection<T>)collectionType).getClass(), type)); - } + public void getJsonService() throws InstantiationException { } @@ -434,7 +431,7 @@ public class Jackson2MapperService exten @Override public void initialize() throws Exception { - mapper = new ObjectMapper(); + mapper = new ObjectMapper(null, null, null);// add configurable JsonFactory,.. later? Enumeration<String> enumKey = annotationInspectors.keys(); while (enumKey.hasMoreElements()) { @@ -658,4 +655,16 @@ public class Jackson2MapperService exten mapper.configure(SerializationFeature.FLUSH_AFTER_WRITE_VALUE, true); } + @Override + public <T> Collection<T> deSerCollection(String json, + Object collectionType, Class<T> elementType) throws Exception { + if (collectionType instanceof TypeReference) { + return mapper.readValue(json, (TypeReference)collectionType); + } else { + return mapper.readValue(json, mapper.getTypeFactory() + .constructCollectionType(((Collection<T>)collectionType).getClass(), elementType)); + } + + } + } Modified: turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java?rev=1574950&r1=1574949&r2=1574950&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java (original) +++ turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java Thu Mar 6 16:31:34 2014 @@ -33,6 +33,8 @@ import org.apache.fulcrum.json.TestClass import org.apache.fulcrum.json.jackson.filters.CustomModuleWrapper; import org.apache.fulcrum.testcontainer.BaseUnitTest; +import com.fasterxml.jackson.core.type.TypeReference; + /** * Jackson 2 JSON Test * @@ -181,10 +183,11 @@ public class DefaultServiceTest extends rectList.add(filteredRect); } String serColl = sc.ser(rectList); + //System.out.println("serColl:" +serColl); - List typeRectList = new ArrayList(); //empty - Collection<Rectangle> resultList0 = sc.deSerCollection(serColl, typeRectList, Rectangle.class); - + TypeReference typeRef = new TypeReference<List<Rectangle>>(){}; + Collection<Rectangle> resultList0 = sc.deSerCollection(serColl, typeRef, Rectangle.class); + //System.out.println("resultList0 class:" +resultList0.getClass()); for (int i = 0; i < 10; i++) { assertEquals("deser reread size failed", (i * i), ((List<Rectangle>)resultList0) .get(i).getSize()); Modified: turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java?rev=1574950&r1=1574949&r2=1574950&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java (original) +++ turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java Thu Mar 6 16:31:34 2014 @@ -35,6 +35,7 @@ import org.apache.fulcrum.testcontainer. import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; /** @@ -96,7 +97,10 @@ public class JacksonMapperEnabledDefault public void testDeSerializeDate() throws Exception { Map<String, Date> map = new HashMap<String, Date>(); map.put("date", Calendar.getInstance().getTime()); - String serJson = ((Jackson2MapperService) sc).ser(map, Map.class); + String serJson0 = sc.ser(map); + System.out.println("serJson0:"+ serJson0); + String serJson = sc.ser(map, Map.class); + System.out.println("serJsonwithmap:"+ serJson); Map<String, Date> serDate = (Map<String, Date>) sc.deSer(serJson, Map.class); assertEquals("Date DeSer failed ", Date.class, serDate.get("date") @@ -148,8 +152,9 @@ public class JacksonMapperEnabledDefault } String result = sc.serializeOnlyFilter(beanList, Bean.class, "name", "age"); + TypeReference typeRef = new TypeReference<List<Bean>>(){}; List<Bean> beanList2 = (List<Bean>) ((Jackson2MapperService) sc) - .deSerCollection(result, beanList, Bean.class); + .deSerCollection(result, typeRef, Bean.class); assertTrue("DeSer failed ", beanList2.size() == 10); for (Bean bean : beanList2) { assertEquals("DeSer failed ", Bean.class, bean.getClass()); @@ -234,8 +239,10 @@ public class JacksonMapperEnabledDefault } String result = sc.addAdapter("M4RMixin", Bean.class, BeanMixin.class) .ser(beanList); + //System.out.println("result:::"+ result); + TypeReference typeRef = new TypeReference<List<Bean>>(){}; List<Bean> beanList2 = (List<Bean>) ((Jackson2MapperService) sc) - .deSerCollection(result, beanList, Bean.class); + .deSerCollection(result, typeRef, Bean.class); assertTrue("DeSer failed ", beanList2.size() == 10); for (Bean bean : beanList2) { assertEquals("DeSer failed ", Bean.class, bean.getClass());