You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2015/10/20 16:37:02 UTC

svn commit: r1709615 - in /turbine/fulcrum/trunk/json/jackson2/src: java/org/apache/fulcrum/json/jackson/ test/org/apache/fulcrum/json/jackson/

Author: gk
Date: Tue Oct 20 14:37:02 2015
New Revision: 1709615

URL: http://svn.apache.org/viewvc?rev=1709615&view=rev
Log:
- add round-trip tests (deserializing using adapters) for jackson2 JSON submodule
- cleanup and minor bugfix (trailing semicolon, comment)

Modified:
    turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CacheService.java
    turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
    turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
    turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/BeanChild.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
    turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java

Modified: turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CacheService.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CacheService.java?rev=1709615&r1=1709614&r2=1709615&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CacheService.java (original)
+++ turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CacheService.java Tue Oct 20 14:37:02 2015
@@ -34,7 +34,7 @@ import com.fasterxml.jackson.databind.se
 public class CacheService implements LogEnabled {
 
     AnnotationIntrospector primary;
-    Map<String, FilterProvider> filters =  new ConcurrentHashMap<String, FilterProvider>();;
+    Map<String, FilterProvider> filters =  new ConcurrentHashMap<String, FilterProvider>();
     
     private static Logger logger;
     
@@ -93,7 +93,7 @@ public class CacheService implements Log
 
     @Override
     public void enableLogging(Logger logger) {
-        this.logger = logger;        
+        CacheService.logger = logger;        
     }
 
 }

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=1709615&r1=1709614&r2=1709615&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 Tue Oct 20 14:37:02 2015
@@ -253,6 +253,7 @@ public class Jackson2MapperService exten
         return serializeAllExceptFilter(src, src.getClass(), true, filterAttr);
     }
     
+    @Override
     public synchronized <T> String serializeAllExceptFilter(Object src, Boolean cache, String... filterAttr) throws Exception {
         return serializeAllExceptFilter(src, src.getClass(), cache, filterAttr);
     }
@@ -291,6 +292,7 @@ public class Jackson2MapperService exten
         return serializeOnlyFilter(src, src.getClass(), true, filterAttrs);
     }
     
+    @Override
     public synchronized <T> String serializeOnlyFilter(Object src,
              Boolean cache, String... filterAttr) throws Exception {
         return serializeOnlyFilter(src, src.getClass(), cache, filterAttr);
@@ -405,7 +407,7 @@ public class Jackson2MapperService exten
             getLogger().debug("add filter for cache filter Class " + filterClass.getName());
             setCustomIntrospectorWithExternalFilterId(filterClass, excludeClasses); // filter class
             if (pf != null)  {
-                cacheService.getFilters().put(filterClass.getName(), (FilterProvider) filter);    
+                cacheService.getFilters().put(filterClass.getName(), filter);    
             } 
         } else {
             filter = (SimpleFilterProvider)cacheService.getFilters().get(filterClass

Modified: turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java?rev=1709615&r1=1709614&r2=1709615&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java (original)
+++ turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java Tue Oct 20 14:37:02 2015
@@ -59,6 +59,7 @@ public class SimpleNameIntrospector exte
      * Filtering on method types.
      * 
      */
+    @Override
     public Boolean isIgnorableType(AnnotatedClass ac) {
         Boolean isIgnorable = super.isIgnorableType(ac);
         if (isIgnorable == null || !isIgnorable) {
@@ -87,6 +88,7 @@ public class SimpleNameIntrospector exte
      *         {@link #filteredClasses} contains the class provided. The
      *         filter itself currently is {@link SimpleFilterProvider}.
      */
+    @Override
     public Object findFilterId(Annotated ac) {
         Object id = super.findFilterId(ac);
         // Let's default to current behavior if annotation is found:
@@ -109,13 +111,12 @@ public class SimpleNameIntrospector exte
                         id = name;
                         break;
                     }
-                 // the currently checked instance of type targetClazz is a parent of the filter class filterClazz -> filter parent
+                    // the currently checked instance of type targetClazz is a parent of the filter class filterClazz -> filter parent
                     if (targetClazz.isAssignableFrom(filterClazz)) {
                         logger.debug("filter applying to child " +filterClazz+" matching parent class "+name);
                         id = name;
                         break;
                     }
-                    // the current clazz could be parent to the filter
                 }
             }
         }
@@ -193,7 +194,7 @@ public class SimpleNameIntrospector exte
     }
     @Override
     public void enableLogging(Logger logger) {
-        this.logger = logger;        
+        SimpleNameIntrospector.logger = logger;        
     }
 
 }
\ No newline at end of file

Modified: turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/BeanChild.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/BeanChild.java?rev=1709615&r1=1709614&r2=1709615&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/BeanChild.java (original)
+++ turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/BeanChild.java Tue Oct 20 14:37:02 2015
@@ -25,10 +25,12 @@ public class BeanChild extends Bean {
     public BeanChild() {
     }
 
+    @Override
     public String getName() {
         return name;
     }
 
+    @Override
     public void setName(String name) {
         this.name = name;
     }

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=1709615&r1=1709614&r2=1709615&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 Tue Oct 20 14:37:02 2015
@@ -39,7 +39,7 @@ import org.apache.fulcrum.testcontainer.
 import org.junit.Before;
 import org.junit.Test;
 
-import com.fasterxml.jackson.core.io.CharacterEscapes;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.core.type.TypeReference;
 
 /**
@@ -72,7 +72,13 @@ public class DefaultServiceTest extends
                 "Serialization failed ",
                 "{\"container\":{\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}",
                 serJson);
+
+      // test round trip
+      TestClass result2 = checkDeserialization(serJson,TestClass.class, TextClassMixin.class);     
+      assertTrue(result2.getContainer() == null); // mixin set to ignore
+      assertTrue(result2.getConfigurationName().equals("Config.xml")); 
     }
+    
     @Test
     // jackson does not deep exclusion of class types (by default?)
     public void testSerializeExcludeClass() throws Exception {
@@ -80,12 +86,16 @@ public class DefaultServiceTest extends
                 String.class);
         assertEquals("Serialization failed ",
                 "{\"container\":{\"cf\":\"Config.xml\"}}", serJson);
+        TestClass result2 = checkDeserialization(serJson,TestClass.class, TextClassMixin.class);
+        assertTrue(result2.getContainer() == null); 
     }
     @Test
     public void testSerializeExcludeClassAndField() throws Exception {
         String serJson = ((Jackson2MapperService)sc).serializeAllExceptFilter(new TestClass("mytest"),
                new Class[] { TestClass.class, String.class} , "container");
         assertEquals("Serialization failed ", "{}", serJson);
+        TestClass result2 =  checkDeserialization(serJson,TestClass.class, TextClassMixin.class);
+        assertTrue(result2.getContainer() == null); 
     }
     @Test
     // adding  expected result to be consistent
@@ -93,10 +103,18 @@ public class DefaultServiceTest extends
         String serJson = ((Jackson2MapperService)sc).serializeAllExceptFilter(new TestClass("mytest"),
                new Class[] { Map.class, String.class} , "configurationName", "name");
         assertEquals("Serialization failed ", "{}", serJson);
+        checkDeserialization(serJson,TestClass.class, TextClassMixin.class); 
         String serJson2 = ((Jackson2MapperService)sc).serializeAllExceptFilter(new TestClass("mytest"),
                 true, "configurationName", "name");
          assertEquals("Serialization failed ", "{}", serJson2);
+         checkDeserialization(serJson2,TestClass.class, TextClassMixin.class); 
     }
+    /**
+     * Overwriting mixin 
+     * @see com.fasterxml.jackson.databind.Module.SetupContext#setMixInAnnotations(Class, Class)
+     * 
+     * @throws Exception
+     */
     @Test
     public void testSerializeExcludeField() throws Exception {
 
@@ -104,6 +122,11 @@ public class DefaultServiceTest extends
         assertEquals("Serialization failed ",
                 "{\"container\":{\"cf\":\"Config.xml\"},\"name\":\"mytest\"}",
                 serJson);
+        sc.addAdapter("Mixin Adapter", TestClass.class, TextClassMixin.class);
+        // overwriting mixin with null: container is included
+        TestClass result2 =checkDeserialization(serJson,TestClass.class, null);
+        assertTrue(result2.getContainer() != null && result2.getContainer() instanceof Map);
+        assertTrue(result2.getName() != null); 
     }
     @Test
     public void testSerializeDate() throws Exception {
@@ -134,7 +157,6 @@ public class DefaultServiceTest extends
     }
     @Test
     public void testSerializationCollectioPrimitiveWrapper() throws Exception {
-
         List<Integer> intList = new ArrayList<Integer>();
         for (int i = 0; i < 10; i++) {
             Integer integer = new Integer(i*i);
@@ -145,11 +167,16 @@ public class DefaultServiceTest extends
                 "Serialization of beans failed ",
                 "[0,1,4,9,16,25,36,49,64,81]",
                 result);
+        // primitives could be deserialzed without type
+        Collection<Integer> result2 = checkDeserCollection(result, List.class, Integer.class);
+        assertTrue("expect at least one entry ", !result2.isEmpty()); 
+        assertTrue("result entry instance check", result2.iterator().next().getClass().isAssignableFrom(Integer.class));
     }
     @Test
     public void testSerializeTypeAdapterForCollection() throws Exception {
         TestSerializer tser = new TestSerializer();
-        CustomModuleWrapper<List> cmw = new CustomModuleWrapper(tser, null);
+        TestDeserializer tdeSer = new TestDeserializer();
+        CustomModuleWrapper<List<Rectangle>> cmw = new CustomModuleWrapper<List<Rectangle>>(tser, tdeSer);
         sc.addAdapter("Collection Adapter", ArrayList.class, cmw);
         List<Rectangle> rectList = new ArrayList<Rectangle>();
         for (int i = 0; i < 10; i++) {
@@ -161,6 +188,11 @@ public class DefaultServiceTest extends
                 "collect ser",
                 "{'rect0':0,'rect1':1,'rect2':4,'rect3':9,'rect4':16,'rect5':25,'rect6':36,'rect7':49,'rect8':64,'rect9':81}",
                 adapterSer.replace('"', '\''));
+        // can only deserialize with type deserializer, adapter already added above
+        List<Rectangle> result = sc.deSer(adapterSer,ArrayList.class);
+        assertTrue("result:" +result.size(),result.size() == 10);
+        int nr = 3; //new Random().nextInt(10);
+        assertTrue("result ("+nr+"):" +result.get(nr).getName(),result.get(nr).getName().equals("rect"+nr) );
     }
     @Test
     public void testMixinAdapter() throws Exception {
@@ -186,7 +218,7 @@ public class DefaultServiceTest extends
             rectList.add(filteredRect);
         }
         String serColl = sc.ser(rectList);
-        TypeReference typeRef = new TypeReference<List<Rectangle>>(){};
+        TypeReference<List<Rectangle>> 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++) {
@@ -198,7 +230,7 @@ public class DefaultServiceTest extends
     public void testDeserializationTypeAdapterForCollection() throws Exception {
         TestSerializer tser = new TestSerializer();
         TestDeserializer tdeSer = new TestDeserializer();
-        CustomModuleWrapper<List> cmw = new CustomModuleWrapper(tser, tdeSer);
+        CustomModuleWrapper<List<Rectangle>> cmw = new CustomModuleWrapper<List<Rectangle>>(tser, tdeSer);
         sc.addAdapter("Collection Adapter", ArrayList.class, cmw);
         List<Rectangle> rectList = new ArrayList<Rectangle>();
         for (int i = 0; i < 10; i++) {
@@ -286,27 +318,34 @@ public class DefaultServiceTest extends
     }
     @Test
     public void testSerializeCollectionWithOnlyFilterAndParentClass() throws Exception {
-        
         List<BeanChild> beanList = new ArrayList<BeanChild>();
         for (int i = 0; i < 3; i++) {
             BeanChild bean = new BeanChild();
             bean.setAge(i);bean.setName("bean"+i);
             beanList.add(bean);
         }
-        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",sc.serializeOnlyFilter(beanList, Bean.class, true,"name"));
+        String jsonResult = sc.serializeOnlyFilter(beanList, Bean.class, true,"name");
+        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",jsonResult);
         //assertEquals("[{\"type\":\"\"},{\"type\":\"\"},{\"type\":\"\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"type"));
+
+        Collection<BeanChild> result2 =checkDeserCollection(jsonResult, List.class, BeanChild.class);
+        assertTrue("expect at least one entry ", !result2.isEmpty()); 
+        assertTrue("result entry instance check", result2.iterator().next().getClass().isAssignableFrom(BeanChild.class));
     }
     @Test
-    public void testSerializeCollectionWithOnlyFilterAndExactClass() throws Exception {
-        
+    public void testSerializeCollectionWithOnlyFilterAndExactClass() throws Exception {    
         List<Bean> beanList = new ArrayList<Bean>();
         for (int i = 0; i < 3; i++) {
             Bean bean = new BeanChild();
             bean.setAge(i);bean.setName("bean"+i);
             beanList.add(bean);
         }
-        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"name"));
-        //assertEquals("[{\"type\":\"\"},{\"type\":\"\"},{\"type\":\"\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"type"));
+        String jsonResult = sc.serializeOnlyFilter(beanList, BeanChild.class, true,"name");
+        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",jsonResult);
+        //assertEquals("[{\"type\":\"\"},{\"type\":\"\"},{\"type\":\"\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"type"));   
+        Collection<Bean> result2 =checkDeserCollection(jsonResult, List.class, Bean.class);
+        assertTrue("expect at least one entry ", !result2.isEmpty()); 
+        assertTrue("result entry instance check", result2.iterator().next().getClass().isAssignableFrom(Bean.class));
     }
     @Test
     public void testSerializeCollectionWithOnlyFilterWithChildClass() throws Exception {
@@ -316,8 +355,12 @@ public class DefaultServiceTest extends
             bean.setAge(i);bean.setName("bean"+i);
             beanList.add(bean);
         }
-        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"name"));
+        String jsonResult = sc.serializeOnlyFilter(beanList, BeanChild.class, true,"name");
+        assertEquals("[{\"name\":\"bean0\"},{\"name\":\"bean1\"},{\"name\":\"bean2\"}]",jsonResult);
         //assertEquals("[{\"type\":\"\"},{\"type\":\"\"},{\"type\":\"\"}]",sc.serializeOnlyFilter(beanList, BeanChild.class, true,"type"));
+        Collection<Bean> result2 =checkDeserCollection(jsonResult, List.class, Bean.class);
+        assertTrue("expect at least one entry ", !result2.isEmpty()); 
+        assertTrue("result entry instance check", result2.iterator().next().getClass().isAssignableFrom(Bean.class));    
     }
     @Test
     public void testSerializeCollectionWithOnlyFilterAndType() throws Exception {
@@ -329,7 +372,9 @@ public class DefaultServiceTest extends
         }
         Class<?> clazz = Class.forName("org.apache.fulcrum.json.jackson.TypedRectangle");
         // no type cft. https://github.com/FasterXML/jackson-databind/issues/303 !!
-        assertEquals("[{\"w\":0},{\"w\":1}]",sc.serializeOnlyFilter(rectList, clazz, true,"w"));
+        String jsonResult = sc.serializeOnlyFilter(rectList, clazz, true,"w");
+        assertEquals("[{\"w\":0},{\"w\":1}]",jsonResult);
+        // could not deserialize easily with missing property type        
     }
     @Test
     public void testSerializeCollectionWithOnlyFilterAndMixin() throws Exception {
@@ -353,10 +398,16 @@ public class DefaultServiceTest extends
             rectList.add(filteredRect);
         }
         TypeReference<List<TypedRectangle>> typeRef = new TypeReference<List<TypedRectangle>>(){};
-        System.out.println("aa:" +((Jackson2MapperService)sc).serCollectionWithTypeReference(rectList,typeRef, false));
+        String jsonResult = ((Jackson2MapperService)sc).serCollectionWithTypeReference(rectList,typeRef, false);
+        System.out.println("aa:" +jsonResult);
+        // could deserialize with type information 
+        Collection<TypedRectangle> result2 =checkDeserCollection(jsonResult, List.class, TypedRectangle.class);
+        assertTrue("expect at least one entry ", !result2.isEmpty()); 
+        assertTrue("result entry instance check", result2.iterator().next().getClass().isAssignableFrom(TypedRectangle.class));
+        
     }
     @Test
-    // jackson dies not escape anything, except double quotes and backslash, you could provide 
+    // jackson does not escape anything, except double quotes and backslash, you could provide 
     public void testSerializeHTMLEscape() throws Exception {
         Rectangle filteredRect = new Rectangle(2, 3, "rectÜber<strong>StockundStein &iuml;</strong></script><script>alert('xss')</script>" + 0);
         String adapterSer = sc.ser(filteredRect);
@@ -367,5 +418,24 @@ public class DefaultServiceTest extends
         // you could set your own escapes here in class esc extending from CharacterEscapes. 
         //((Jackson2MapperService)sc).getMapper().getFactory().setCharacterEscapes(esc ) );
     }
+    
+    private <T> T checkDeserialization(String serJson, Class<T> target, Class mixin) throws Exception {
+        sc.addAdapter("Mixin Adapter", target, mixin);
+        T result = sc.deSer(serJson,target);
+        assertTrue("Result Instance Check", target.isAssignableFrom(result.getClass()));
+        return result;
+    }
+    private <U> Collection<U> checkDeserCollection(String serJson,Class<? extends Collection> collClass, Class<U> entryClass) throws Exception {
+          Collection<U> result = ((Jackson2MapperService) sc).deSerCollectionWithType(serJson, collClass, entryClass);
+          //System.out.println("result:"+ result + " is of type: "+ result.getClass() + "and assignable from "+ collClass);
+          assertTrue("Result Instance Check failed for result class "+ result.getClass() + " and target class: "+ collClass, 
+                  collClass.isAssignableFrom(result.getClass()));
+          return result;
+    }
+}
+
+
+abstract class TextClassMixin {
 
+    @JsonIgnore abstract Map<String, Object> getContainer();
 }

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=1709615&r1=1709614&r2=1709615&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 Tue Oct 20 14:37:02 2015
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTru
 
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -94,10 +95,9 @@ public class JacksonMapperEnabledDefault
         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);
+        Map<String, Date> serDate = sc.deSer(serJson, Map.class);
         assertEquals("Date DeSer failed ", Date.class, serDate.get("date")
-                .getClass());
+                .getClass());   
     }
     @Test
     public void testSerializeWithCustomFilter() throws Exception {
@@ -132,7 +132,25 @@ public class JacksonMapperEnabledDefault
                 "Serialization of beans failed ",
                 "['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0','age':0},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1','age':1},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2','age':2},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe3','age':3},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe4','age':4},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe5','age':5},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe6','age':6},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe7','age':7},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe8','age':8},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe9','age':9}]]",
                 result.replace('"', '\''));
+        
+        Collection<Rectangle> resultDeSer = checkDeserCollection(result, List.class, Rectangle.class);
     }
+    
+    private <T> T checkDeserialization(String serJson, Class<T> target, Class mixin) throws Exception {
+        sc.addAdapter("TestClass Adapter", target, mixin);
+        T result = sc.deSer(serJson,target);
+        //System.out.println("result:"+ result + " is of type "+ target.getName());
+        assertTrue("result instance check", target.isAssignableFrom(result.getClass()));
+        return result;
+     }
+    
+    private <U> Collection<U> checkDeserCollection(String serJson,Class<? extends Collection> collClass, Class entryClass) throws Exception {
+          Collection<U> result = ((Jackson2MapperService) sc).deSerCollectionWithType(serJson, collClass, entryClass);
+          assertTrue("result instance check failed for result class "+ result.getClass() + " and target class: "+ collClass, 
+                  collClass.isAssignableFrom(result.getClass()));
+          return result;
+    }
+  
     @Test
     public void testDeserializationCollectionWithFilter() throws Exception {
 

Modified: turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java?rev=1709615&r1=1709614&r2=1709615&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java (original)
+++ turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java Tue Oct 20 14:37:02 2015
@@ -36,7 +36,6 @@ import org.apache.fulcrum.json.JsonServi
 import org.apache.fulcrum.json.Rectangle;
 import org.apache.fulcrum.json.TestClass;
 import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.fulcrum.testcontainer.BaseUnitTest;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -88,7 +87,7 @@ public class JacksonMapperTest extends B
         Map<String, Date> map = new HashMap<String, Date>();
         map.put("date", Calendar.getInstance().getTime());
         String serJson = ((Jackson2MapperService) sc).ser(map, Map.class);
-        Map serDate = (Map) sc.deSer(serJson, Map.class);
+        Map serDate = sc.deSer(serJson, Map.class);
         assertEquals("Date DeSer failed ", String.class, serDate.get("date")
                 .getClass());
     }