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 ï</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());
}