Author: gk
Date: Tue Apr 12 15:22:39 2016
New Revision: 1738815
URL: http://svn.apache.org/viewvc?rev=1738815&view=rev
Log:
- update jackson2 version to 2.7.3
- add optional jackson-datatype-json-org dependency
- add some list/collection tests
Modified:
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
turbine/fulcrum/trunk/json/jackson2/pom.xml
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
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.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=1738815&r1=1738814&r2=1738815&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
Tue Apr 12 15:22:39 2016
@@ -39,6 +39,8 @@ import java.util.Collection;
public interface JsonService {
/** Avalon Identifier **/
String ROLE = JsonService.class.getName();
+
+ String SERVICE_NAME = ROLE;
/**
* Serializes a Java object
Modified: turbine/fulcrum/trunk/json/jackson2/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/pom.xml?rev=1738815&r1=1738814&r2=1738815&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/pom.xml (original)
+++ turbine/fulcrum/trunk/json/jackson2/pom.xml Tue Apr 12 15:22:39 2016
@@ -97,8 +97,14 @@
<artifactId>jackson-databind</artifactId>
<version>${jackson2.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-json-org</artifactId>
+ <version>${jackson2.version}</version>
+ <optional>true</optional>
+ </dependency>
</dependencies>
<properties>
- <jackson2.version>2.6.1</jackson2.version>
+ <jackson2.version>2.7.3</jackson2.version>
</properties>
</project>
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=1738815&r1=1738814&r2=1738815&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 Apr 12 15:22:39 2016
@@ -25,6 +25,8 @@ import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.configuration.Configurable;
@@ -137,7 +139,7 @@ public class Jackson2MapperService exten
return ser(src);
}
getLogger().debug("ser class::" + src.getClass() + " with filter " +
filter);
- mapper.setFilters(filter);
+ mapper.setFilterProvider(filter);
String res = mapper.writer(filter).writeValueAsString(src);
if (cleanCache) {
cacheService.cleanSerializerCache(mapper);
@@ -149,7 +151,7 @@ public class Jackson2MapperService exten
public <T> T deSer(String json, Class<T> type) throws Exception {
ObjectReader reader = null;
if (type != null)
- reader = mapper.reader(type);
+ reader = mapper.readerFor(type);
else
reader = mapper.reader();
@@ -164,7 +166,7 @@ public class Jackson2MapperService exten
public <T> String serCollectionWithTypeReference(Collection<T> src,
TypeReference collectionType, Boolean cleanCache)
throws Exception {
- String res =
mapper.writerWithType(collectionType).writeValueAsString(src);
+ String res = mapper.writerFor(collectionType).writeValueAsString(src);
if (cleanCache) {
cacheService.cleanSerializerCache(mapper);
}
@@ -178,10 +180,19 @@ public class Jackson2MapperService exten
return mapper.readValue(json, (TypeReference<T>)collectionType);
} else {
return mapper.readValue(json, mapper.getTypeFactory()
-
.constructCollectionType(((Collection<T>)collectionType).getClass(),
elementType));
+
.constructCollectionType(((Collection<T>)collectionType).getClass(),
elementType));
}
}
+ public <T> List<T> deSerList(String json, Class<? extends List> targetList,
+ Object listType, Class<T> elementType) throws Exception {
+ return mapper.readValue(json,
mapper.getTypeFactory().constructParametrizedType(targetList,listType.getClass(),
elementType));
+ }
+
+ public <T,U> Map<T,U> deSerMap(String json, Class<? extends Map> mapClass,
Class<T> keyClass, Class<U> valueClass) throws Exception {
+ return mapper.readValue(json,
mapper.getTypeFactory().constructMapType(mapClass, keyClass, valueClass));
+ }
+
public <T> Collection<T> deSerCollectionWithTypeReference(String json,
TypeReference<T> collectionType ) throws Exception {
return mapper.readValue(json, collectionType);
@@ -207,11 +218,11 @@ public class Jackson2MapperService exten
}
/**
- * Add a named module
+ * Add a named module or a {@link Module}.
*
- * @param name Name of the module
+ * @param name Name of the module, optional. Could be null, if module is a
{@link Module}.
*
- * @param target Target class
+ * @param target Target class, optional. Could be null, if module is a
{@link Module}.
*
* @param module
* Either an Jackson Module @link {@link Module} or an custom
@@ -230,7 +241,7 @@ public class Jackson2MapperService exten
mapper.registerModule(cm);
} else if (module instanceof Module) {
getLogger().debug(
- "registering module " + module + " for: " + target);
+ "registering module " + module );
mapper.registerModule((Module) module);
} else {
throw new Exception("expecting module type" + Module.class);
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=1738815&r1=1738814&r2=1738815&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 Apr 12 15:22:39 2016
@@ -41,6 +41,9 @@ import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.MappingJsonFactory;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
/**
* Jackson 2 JSON Test
@@ -63,6 +66,17 @@ public class DefaultServiceTest extends
String serJson = sc.ser(new TestClass("mytest"));
assertEquals("Serialization failed ", preDefinedOutput, serJson);
}
+
+// @Test
+// public void testCustomMapperSerialize() throws Exception {
+// ObjectMapper objectMapper = new ObjectMapper(
+// new MappingJsonFactory(((Jackson2MapperService)
sc).getMapper()));
+// objectMapper.enableDefaultTypingAsProperty(
+// DefaultTyping.NON_FINAL, "type");
+// ((Jackson2MapperService) sc).setMapper(objectMapper);
+// String serJson = sc.ser(new TestClass("mytest"));
+// assertEquals("Serialization with custom mapper failed ",
JacksonMapperEnabledDefaultTypingTest.preDefinedOutput, serJson);
+// }
@Test
// the default test class: one String field, one Map
@@ -227,6 +241,52 @@ public class DefaultServiceTest extends
}
}
@Test
+ public void testDeserializationWithPlainListCollection() throws Exception {
+ List<Rectangle> rectList = new ArrayList<Rectangle>();
+ for (int i = 0; i < 10; i++) {
+ Rectangle filteredRect = new Rectangle(i, i, "rect" + i);
+ rectList.add(filteredRect);
+ }
+ String serColl = sc.ser(rectList);
+ Collection<Rectangle> resultList0 = sc.deSerCollection(serColl, new
ArrayList(), 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());
+ }
+ }
+ @Test
+ public void testDeserializationWithPlainList() throws Exception {
+ List<Rectangle> rectList = new ArrayList<Rectangle>();
+ for (int i = 0; i < 10; i++) {
+ Rectangle filteredRect = new Rectangle(i, i, "rect" + i);
+ rectList.add(filteredRect);
+ }
+ String serColl = sc.ser(rectList);
+ //Collection<Rectangle> resultList0 = sc.deSerCollection(serColl,
List.class, Rectangle.class);
+ List<Rectangle> resultList0 =
((Jackson2MapperService)sc).deSerList(serColl, ArrayList.class,List.class,
Rectangle.class);
+ System.out.println("resultList0 class:" +resultList0.getClass());
+ for (int i = 0; i < 10; i++) {
+ assertEquals("deser reread size failed", (i * i), resultList0
+ .get(i).getSize());
+ }
+ }
+ @Test
+ public void testDeserializationWithPlainMap() throws Exception {
+ Map<String,Rectangle> rectList = new HashMap<String,Rectangle>();
+ for (int i = 0; i < 10; i++) {
+ Rectangle filteredRect = new Rectangle(i, i, "rect" + i);
+ rectList.put(""+i,filteredRect);
+ }
+ String serColl = sc.ser(rectList);
+ Map<String,Rectangle> resultList0 =
((Jackson2MapperService)sc).deSerMap(serColl, Map.class,
String.class,Rectangle.class);
+ System.out.println("resultList0 class:" +resultList0.getClass());
+ for (int i = 0; i < 10; i++) {
+ assertEquals("deser reread size failed", (i * i), resultList0
+ .get(""+i).getSize());
+ }
+ }
+ @Test
public void testDeserializationTypeAdapterForCollection() throws Exception
{
TestSerializer tser = new TestSerializer();
TestDeserializer tdeSer = new TestDeserializer();
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=1738815&r1=1738814&r2=1738815&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 Apr 12 15:22:39 2016
@@ -54,7 +54,7 @@ import com.fasterxml.jackson.databind.Ob
* @version $Id$
*/
public class JacksonMapperEnabledDefaultTypingTest extends BaseUnit4Test {
- private final String preDefinedOutput =
"{\"type\":\"org.apache.fulcrum.json.TestClass\",\"container\":{\"type\":\"java.util.HashMap\",\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}";
+ public static final String preDefinedOutput =
"{\"type\":\"org.apache.fulcrum.json.TestClass\",\"container\":{\"type\":\"java.util.HashMap\",\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}";
private JsonService sc = null;
Logger logger;
Modified:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java?rev=1738815&r1=1738814&r2=1738815&view=diff
==============================================================================
---
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
(original)
+++
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
Tue Apr 12 15:22:39 2016
@@ -64,6 +64,7 @@ public class JacksonMapperEnabledDefault
((Jackson2MapperService) sc).getMapper().enableDefaultTypingAsProperty(
DefaultTyping.OBJECT_AND_NON_CONCRETE, "type");
}
+
@Test
public void testSerialize() 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=1738815&r1=1738814&r2=1738815&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 Apr 12 15:22:39 2016
@@ -19,7 +19,8 @@ package org.apache.fulcrum.json.jackson;
* under the License.
*/
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Calendar;
@@ -36,12 +37,16 @@ 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.json.JSONArray;
+import org.json.JSONObject;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
/**
* Jackson2 JSON Test
@@ -167,8 +172,57 @@ public class JacksonMapperTest extends B
((Map) ((List) beanList2).get(i)).get("name").equals(
"joe" + i));
}
-
}
+
+ // support for org.json mapping
+ @Test
+ public void testDeSerToORGJSONCollectionObject() throws Exception {
+ // test array
+ List<Bean> beanResults = new ArrayList<Bean> ( );
+ Bean tu = new Bean();
+ tu.setName("jim jar");
+ beanResults.add(tu);
+ Bean tu2 = new Bean();
+ tu2.setName("jim2 jar2");
+ tu2.setAge(45);
+ beanResults.add(tu2);
+
+ String[] filterAttr = {"name", "age" };
+ String filteredSerList = sc.serializeOnlyFilter(beanResults,
Bean.class, filterAttr);
+ logger.debug("serList: "+ filteredSerList);
+
+ sc.addAdapter(null, null,new JsonOrgModule());
+ //((Jackson2MapperService)sc).registerModule(new JsonOrgModule());
+
+ JSONArray jsonOrgResult = sc.deSer(filteredSerList,
JSONArray.class);//readValue(serList, JSONArray.class);
+ logger.debug("jsonOrgResult: "+ jsonOrgResult.toString(2));
+ assertEquals("DeSer failed ", "jim jar",
((JSONObject)(jsonOrgResult.get(0))).get("name") );
+ assertEquals("DeSer failed ", 45,
((JSONObject)(jsonOrgResult.get(1))).get("age") );
+ }
+
+ // support for org.json mapping
+ @Test
+ public void testSerToORGJSONCollectionObject() throws Exception {
+
+ // test array
+ List<Bean> userResults = new ArrayList<Bean> ( );
+ Bean tu = new Bean();
+ tu.setName("jim jar");
+ userResults.add(tu);
+ Bean tu2 = new Bean();
+ tu2.setName("jim2 jar2");
+ tu2.setAge(45);
+ userResults.add(tu2);
+
+ String[] filterAttr = {"name", "age" };
+
+ sc.addAdapter(null, null,new JsonOrgModule());
+ //((Jackson2MapperService)sc).registerModule(new JsonOrgModule());
+ String filteredSerList = sc.serializeOnlyFilter(userResults,
Bean.class, filterAttr);
+ logger.debug("serList: "+ filteredSerList);
+
+ }
+
@Test
public void testSerializeWithMixin() throws Exception {
Rectangle filteredRectangle = new Rectangle(5, 10);