Author: gk
Date: Wed Oct 17 10:20:29 2018
New Revision: 1844081
URL: http://svn.apache.org/viewvc?rev=1844081&view=rev
Log:
- Update to version 2.0.0-SNAPSHOT (java 8),
- Cleanup
- jackson2 module: Jackson v2.9.6 cleanup, use HashMap instead of Hashtable and
split into methods for initialize in Jackson2MapperService
- Jackson2 tests: use packages: mixins, example, serializers, add some tests
Added:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/example/
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/example/BeanChild.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Rectangle.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/example/TestClass.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/BeanMixin.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/BeanMixin2.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/RectangleMixin.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/RectangleMixin2.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/TypedRectangle.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/serializers/
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/serializers/TestDeserializer.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/serializers/TestDummyWrapperDeserializer.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/serializers/TestJsonSerializer.java
(with props)
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/serializers/TestSerializer.java
(with props)
Removed:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/Rectangle.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/TestClass.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Bean.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/BeanMixin.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Mixin.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TestDeserializer.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TestJsonSerializer.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TestSerializer.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
Modified:
turbine/fulcrum/trunk/json/api/pom.xml
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
turbine/fulcrum/trunk/json/dist/pom.xml
turbine/fulcrum/trunk/json/jackson/pom.xml
turbine/fulcrum/trunk/json/jackson2/pom.xml
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/MixinModule.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/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
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JsonOrgJacksonMapperTest.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JsonPathJacksonTest.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/concurrent/JSONConcurrentTest.java
turbine/fulcrum/trunk/json/pom.xml
turbine/fulcrum/trunk/json/src/changes/changes.xml
Modified: turbine/fulcrum/trunk/json/api/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/pom.xml?rev=1844081&r1=1844080&r2=1844081&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/api/pom.xml (original)
+++ turbine/fulcrum/trunk/json/api/pom.xml Wed Oct 17 10:20:29 2018
@@ -19,7 +19,7 @@
<parent>
<artifactId>fulcrum-json-parent</artifactId>
<groupId>org.apache.fulcrum</groupId>
- <version>1.1.2-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -128,7 +128,7 @@ public interface JsonService {
*
* <code>refreshFilter</code> is set to <code>true</code> for this method
call.
*/
- public <T> String serializeOnlyFilter(Object src,
+ public String serializeOnlyFilter(Object src,
String... filterAttr) throws Exception;
/**
@@ -142,7 +142,7 @@ public interface JsonService {
*
* <code>refreshFilter</code> is set to <code>true</code> for this method
call.
*/
- public <T> String serializeOnlyFilter(Object src, Boolean cleanFilter,
+ public String serializeOnlyFilter(Object src, Boolean cleanFilter,
String... filterAttr) throws Exception;
/**
@@ -211,13 +211,13 @@ public interface JsonService {
*
* @see #serializeAllExceptFilter(Object, Class, Boolean, String...)
*/
- public <T> String serializeAllExceptFilter(Object src,
+ public String serializeAllExceptFilter(Object src,
Boolean cleanFilter, String... filterAttr) throws Exception;
/**
* @see #serializeAllExceptFilter(Object, Class, Boolean, String...)
*/
- public <T> String serializeAllExceptFilter(Object src,
+ public String serializeAllExceptFilter(Object src,
String... filterAttr) throws Exception;
/**
Modified: turbine/fulcrum/trunk/json/dist/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/dist/pom.xml?rev=1844081&r1=1844080&r2=1844081&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/dist/pom.xml (original)
+++ turbine/fulcrum/trunk/json/dist/pom.xml Wed Oct 17 10:20:29 2018
@@ -22,7 +22,7 @@
<parent>
<groupId>org.apache.fulcrum</groupId>
<artifactId>fulcrum-json-parent</artifactId>
- <version>1.1.2-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<groupId>org.apache.fulcrum</groupId>
<artifactId>fulcrum-json-dist</artifactId>
Modified: turbine/fulcrum/trunk/json/jackson/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson/pom.xml?rev=1844081&r1=1844080&r2=1844081&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson/pom.xml (original)
+++ turbine/fulcrum/trunk/json/jackson/pom.xml Wed Oct 17 10:20:29 2018
@@ -19,7 +19,7 @@
<parent>
<artifactId>fulcrum-json-parent</artifactId>
<groupId>org.apache.fulcrum</groupId>
- <version>1.1.2-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -61,9 +61,9 @@
<dependencies>
<dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.6</version>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.7</version>
</dependency>
<dependency>
<groupId>org.apache.avalon.framework</groupId>
@@ -84,12 +84,16 @@
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.13</version>
+ <version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
- <version>1.9.13</version>
+ <version>${jackson.version}</version>
</dependency>
</dependencies>
+ <properties>
+ <!-- 1.9.13, released 14-Jul-2013: latest version see
https://github.com/FasterXML/jackson -->
+ <jackson.version>1.9.13</jackson.version>
+ </properties>
</project>
Modified: turbine/fulcrum/trunk/json/jackson2/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/pom.xml?rev=1844081&r1=1844080&r2=1844081&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/pom.xml (original)
+++ turbine/fulcrum/trunk/json/jackson2/pom.xml Wed Oct 17 10:20:29 2018
@@ -19,7 +19,7 @@
<parent>
<artifactId>fulcrum-json-parent</artifactId>
<groupId>org.apache.fulcrum</groupId>
- <version>1.1.2-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -128,6 +128,6 @@
<properties>
<!-- 2.7.x hase Java 7 baseline, but is compiled with Java 6 support,
cft. https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7.
With Jackson 2.8, Java 7 languages features will be allowed -->
- <jackson2.version>2.7.9</jackson2.version>
+ <jackson2.version>2.9.6</jackson2.version>
</properties>
</project>
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -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<>();
private static 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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -23,9 +23,8 @@ import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
-import java.util.Enumeration;
import java.util.HashMap;
-import java.util.Hashtable;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -92,26 +91,25 @@ public class Jackson2MapperService exten
private static final String DATE_FORMAT = "dateFormat";
private static final String ESCAPE_CHARS = "escapeCharsGlobal";
private static final String ESCAPE_CHAR_CLASS = "escapeCharsClass";
- private static final String USEJSONPATH = "useJsonPath";
+ private static final String USE_JSON_PATH = "useJsonPath";
ObjectMapper mapper;
AnnotationIntrospector primary; // support default
AnnotationIntrospector secondary;
- public String ANNOTATIONINSPECTOR = "annotationInspectors";
+ private static final String ANNOTATIONINSPECTOR = "annotationInspectors";
- private Hashtable<String, String> annotationInspectors = null;
- private Hashtable<String, Boolean> features = null;
- private Hashtable<String, String> featureTypes = null;
+ private Map<String, String> annotationInspectors = null;
+ private Map<String, Boolean> features = null;
+ private Map<String, String> featureTypes = null;
private String dateFormat;
/**
* Default dateformat is <code>MM/dd/yyyy</code>, could be overwritten in
{@link #setDateFormat(DateFormat)}.
*/
- public final String DEFAULTDATEFORMAT = "MM/dd/yyyy";
+ public static final String DEFAULTDATEFORMAT = "MM/dd/yyyy";
- final boolean defaultType = false;
- public boolean cacheFilters = true; // true -> this is by default true in
jackson, if not using
+ private boolean cacheFilters = true; // true -> this is by default true in
jackson, if not using
// multiple serialization in one thread
String[] defaultTypeDefs = null;
private CacheService cacheService;
@@ -129,11 +127,11 @@ public class Jackson2MapperService exten
return ser(src, type, false);
}
- public <T> String ser(Object src, FilterProvider filter) throws Exception {
+ public String ser(Object src, FilterProvider filter) throws Exception {
return ser(src, filter, false);
}
- public <T> String ser(Object src, FilterProvider filter, Boolean
cleanCache) throws Exception {
+ public String ser(Object src, FilterProvider filter, Boolean cleanCache)
throws Exception {
String serResult= null;
if (src == null) {
getLogger().info("no serializable object.");
@@ -145,81 +143,16 @@ public class Jackson2MapperService exten
} else {
getLogger().debug("add filter for cache filter Class " +
src.getClass().getName());
setCustomIntrospectorWithExternalFilterId(src.getClass(), null);
// filter class
- if (filter != null) {
- cacheService.getFilters().put(src.getClass().getName(),
filter);
- }
+ cacheService.getFilters().put(src.getClass().getName(), filter);
}
getLogger().debug("ser class::" + src.getClass() + " with filter " +
filter);
- //mapper.setFilterProvider(filter);// this is global
- String res = mapper.writer().with(filter).writeValueAsString(src);
- if (cleanCache) {
- cacheService.cleanSerializerCache(mapper);
- }
- return res;
- }
-
- @Override
- public String ser(Object src, Boolean cleanCache) throws Exception {
- if (cacheService.getFilters().containsKey(src.getClass().getName())) {
- getLogger().warn(
- "Found registered filter - using instead of default view
filter for class:"
- + src.getClass().getName());
- // throw new
- // Exception("Found registered filter - could not use custom view
and custom filter for class:"+
- // src.getClass().getName());
- SimpleFilterProvider filter = (SimpleFilterProvider)
cacheService.getFilters().get(src.getClass()
- .getName());
- return ser(src, filter, cleanCache);
- }
- String res =
mapper.writerWithView(Object.class).writeValueAsString(src);
- if (cleanCache != null && cleanCache) {
- cacheService.cleanSerializerCache(mapper);
- }
- return res;
- }
-
- @Override
- public <T> String ser(Object src, Class<T> type, Boolean cleanCache)
- throws Exception {
- getLogger().debug("serializing object:" + src + " for type "+ type);
- if (src != null &&
cacheService.getFilters().containsKey(src.getClass().getName())) {
- getLogger()
- .warn("Found registered filter - could not use custom view
and custom filter for class:"
- + src.getClass().getName());
- // throw new
- // Exception("Found registered filter - could not use custom view
and custom filter for class:"+
- // src.getClass().getName());
- SimpleFilterProvider filter = (SimpleFilterProvider)
cacheService.getFilters().get(src.getClass()
- .getName());
- return ser(src, filter);
- }
- mapper.setFilterProvider(new
SimpleFilterProvider().setFailOnUnknownId(false));
- String res = (type != null)?
mapper.writerWithView(type).writeValueAsString(src):
mapper.writer().writeValueAsString(src);
+ mapper.setFilterProvider(filter);
+ String res = mapper.writer(filter).writeValueAsString(src);
if (cleanCache) {
cacheService.cleanSerializerCache(mapper);
}
- // jackson bug? filter is not cleaned in collection type
- if (type != null) {
- // todo may do something
- }
return res;
- }
-
-
- public <T> String ser( Object... objects) throws Exception {
- return ser( objects, false );
}
- /**
- * convenience method to provide a list of coolections without providign a
wrapper
- * @param cleanCache
- * @param objects
- * @return serialized JSON
- * @throws Exception
- */
- public <T> String ser(Boolean cleanCache, Object... objects) throws
Exception {
- return ser( objects, cleanCache );
- }
-
@Override
public <T> T deSer(String json, Class<T> type) throws Exception {
@@ -229,11 +162,11 @@ public class Jackson2MapperService exten
else
reader = mapper.reader();
- return (T) reader.readValue(json);
+ return reader.readValue(json);
}
public <T> T deSer(Object src, Class<T> type) throws Exception {
- return mapper.convertValue( src, type);
+ return mapper.convertValue( src, type);
}
public <T> Collection<T> deSerCollectionWithType(String json, Class<?
extends Collection> collectionClass, Class<T> type)
@@ -262,9 +195,8 @@ public class Jackson2MapperService exten
}
}
- 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> List<T> deSerList(String json, Class<? extends List>
targetList, Class<T> elementType) throws Exception {
+ return mapper.readValue(json,
mapper.getTypeFactory().constructParametricType(targetList,elementType));
}
public <T,U> Map<T,U> deSerMap(String json, Class<? extends Map> mapClass,
Class<T> keyClass, Class<U> valueClass) throws Exception {
@@ -276,9 +208,6 @@ public class Jackson2MapperService exten
return mapper.readValue(json, collectionType);
}
- public void getJsonService() throws InstantiationException {
- }
-
/**
* @param name name of the module
* @param target target class
@@ -326,7 +255,17 @@ public class Jackson2MapperService exten
}
return this;
}
-
+
+ /**
+ * set a single mixin. convenience method, calls {@link
ObjectMapper#registerModule(Module)}.
+ *
+ * @param src the object to be serialized
+ * @param name the name for the mixin
+ * @param target the target class for the mixin
+ * @param mixin the mixin class
+ * @return serialized result
+ * @throws JsonProcessingException
+ */
@SuppressWarnings("rawtypes")
public String withMixinModule(Object src, String name, Class target,
Class mixin) throws JsonProcessingException {
@@ -334,28 +273,44 @@ public class Jackson2MapperService exten
getLogger().debug("registering module " + mx + ", mixin: " + mixin);
return mapper.registerModule(mx).writer().writeValueAsString(src);
}
+
+ /**
+ * convenience method with read (but old mixins will be cleared!).
+ *
+ * @see {@link ObjectMapper#setMixins(Class, Class)}
+ *
+ * @param src the object to be serialized
+ * @param target the target class for the mixin
+ * @param mixin the mixin class
+ * @return serialized result
+ * @throws JsonProcessingException
+ */
@SuppressWarnings("rawtypes")
public String withSetMixins(Object src, Class target,
Class mixin) throws JsonProcessingException {
return setMixins(target, mixin).writer().writeValueAsString(src);
}
+
@SuppressWarnings("rawtypes")
public ObjectMapper setMixins(Class target,
- Class mixin) throws JsonProcessingException {
- Map<Class<?>, Class<?>> sourceMixins = new HashMap<Class<?>,
Class<?>>(1);
- sourceMixins.put( target,mixin );
+ Class mixin) {
+ Map<Class<?>, Class<?>> sourceMixins = null;
+ if (target != null) {
+ sourceMixins = new HashMap<>(1);
+ sourceMixins.put( target,mixin );
+ }
getLogger().debug("clean set mixins for target " + target + ", mixin:
" + mixin);
return mapper.setMixIns( sourceMixins );
}
@Override
- public <T> String serializeAllExceptFilter(Object src, String...
filterAttr)
+ public String serializeAllExceptFilter(Object src, String... filterAttr)
throws Exception {
return serializeAllExceptFilter(src, src.getClass(), true, filterAttr);
}
@Override
- public synchronized <T> String serializeAllExceptFilter(Object src,
Boolean cache, String... filterAttr) throws Exception {
+ public synchronized String serializeAllExceptFilter(Object src, Boolean
cache, String... filterAttr) throws Exception {
return serializeAllExceptFilter(src, src.getClass(), cache,
filterAttr);
}
@@ -400,13 +355,13 @@ public class Jackson2MapperService exten
}
@Override
- public <T> String serializeOnlyFilter(Object src, String... filterAttrs)
+ public String serializeOnlyFilter(Object src, String... filterAttrs)
throws Exception {
return serializeOnlyFilter(src, src.getClass(), true, filterAttrs);
}
@Override
- public synchronized <T> String serializeOnlyFilter(Object src,
+ public synchronized String serializeOnlyFilter(Object src,
Boolean cache, String... filterAttr) throws Exception {
return serializeOnlyFilter(src, src.getClass(), cache, filterAttr);
}
@@ -432,11 +387,51 @@ public class Jackson2MapperService exten
getLogger().debug("setting filteroutAllexcept filter for size of
filterAttr: " + filterAttr.length);
} else {
getLogger().warn("no filter attributes set!");
- pf = SimpleBeanPropertyFilter.filterOutAllExcept("dummy"); // to
be consistent with gson anything is filtered out.
+ pf = SimpleBeanPropertyFilter.filterOutAllExcept("dummy");
}
if (filterClasses == null) throw new Exception("You have to provide
some class to apply the filtering!");
return filter(src, filterClasses, null, pf, refresh);
- }
+ }
+
+ @Override
+ public String ser(Object src, Boolean cleanCache) throws Exception {
+ if (cacheService.getFilters().containsKey(src.getClass().getName())) {
+ getLogger().warn(
+ "Found registered filter - using instead of default view
filter for class:"
+ + src.getClass().getName());
+ SimpleFilterProvider filter = (SimpleFilterProvider)
cacheService.getFilters().get(src.getClass()
+ .getName());
+ return ser(src, filter,
cleanCache);//mapper.writerWithView(src.getClass()).writeValueAsString(src);
+ }
+ String res =
mapper.writerWithView(Object.class).writeValueAsString(src);
+ if (cleanCache != null && cleanCache) {
+ cacheService.cleanSerializerCache(mapper);
+ }
+ return res;
+ }
+
+ @Override
+ public <T> String ser(Object src, Class<T> type, Boolean cleanCache)
+ throws Exception {
+ getLogger().info("serializing object:" + src + " for type "+ type);
+ if (src != null &&
cacheService.getFilters().containsKey(src.getClass().getName())) {
+ getLogger()
+ .warn("Found registered filter - could not use custom view
and custom filter for class:"
+ + src.getClass().getName());
+ // throw new
+ // Exception("Found registered filter - could not use custom view
and custom filter for class:"+
+ // src.getClass().getName());
+ SimpleFilterProvider filter = (SimpleFilterProvider)
cacheService.getFilters().get(src.getClass()
+ .getName());
+ return ser(src, filter);
+ }
+
+ String res = (type != null)?
mapper.writerWithView(type).writeValueAsString(src):
mapper.writeValueAsString(src);
+ if (cleanCache) {
+ cacheService.cleanSerializerCache(mapper);
+ }
+ return res;
+ }
/**
*
@@ -538,7 +533,7 @@ public class Jackson2MapperService exten
@Override
public void configure(Configuration conf) throws ConfigurationException {
getLogger().debug("conf.getName()" + conf.getName());
- this.annotationInspectors = new Hashtable<String, String>();
+ this.annotationInspectors = new HashMap<>();
final Configuration configuredAnnotationInspectors = conf.getChild(
ANNOTATIONINSPECTOR, false);
@@ -550,14 +545,14 @@ public class Jackson2MapperService exten
String key = nameVal[i].getName();
getLogger().debug("configured key: " + key);
if (key.equals("features")) {
- this.features = new Hashtable<String, Boolean>();
- this.featureTypes = new Hashtable<String, String>();
- Configuration[] features = nameVal[i].getChildren();
- for (int j = 0; j < features.length; j++) {
- boolean featureValue = features[j]
+ this.features = new HashMap<>();
+ this.featureTypes = new HashMap<>();
+ Configuration[] localFeatures = nameVal[i].getChildren();
+ for (int j = 0; j < localFeatures.length; j++) {
+ boolean featureValue = localFeatures[j]
.getAttributeAsBoolean("value", false);
- String featureType = features[j].getAttribute("type");
- String feature = features[j].getValue();
+ String featureType =
localFeatures[j].getAttribute("type");
+ String feature = localFeatures[j].getValue();
getLogger().debug(
"configuredAnnotationInspectors " + feature
+ ":" + featureValue);
@@ -601,7 +596,7 @@ public class Jackson2MapperService exten
configuredDefaultType.getAttribute("key") };
}
final Configuration configuredjsonPath = conf.getChild(
- USEJSONPATH, false);
+ USE_JSON_PATH, false);
if (configuredjsonPath != null) {
this.useJsonPath = configuredjsonPath.getValueAsBoolean();
}
@@ -611,63 +606,90 @@ public class Jackson2MapperService exten
public void initialize() throws Exception {
mapper = new ObjectMapper(null, null, null);// add configurable
JsonFactory,.. later?
- Enumeration<String> enumKey = annotationInspectors.keys();
- while (enumKey.hasMoreElements()) {
- String key = enumKey.nextElement();
- String avClass = annotationInspectors.get(key);
- if (key.equals("primary") && avClass != null) {
- try {
- primary = (AnnotationIntrospector)
Class.forName(avClass).getConstructor()
- .newInstance();
- } catch (Exception e) {
- throw new Exception(
- "JsonMapperService: Error instantiating " + avClass
- + " for " + key);
- }
- } else if (key.equals("secondary") && avClass != null) {
- try {
- secondary = (AnnotationIntrospector)
Class.forName(avClass).getConstructor()
- .newInstance();
- } catch (Exception e) {
- throw new Exception(
- "JsonMapperService: Error instantiating " + avClass
- + " for " + key);
- }
+ initAnnotationInspectors();
+
+ initFeatures();
+
+ initDefaultTyping();
+
+ getLogger().info("setting date format to:" + dateFormat);
+ getLogger().info("cacheFilters is:" + cacheFilters);
+ if (!cacheFilters) {
+ mapper.configure(SerializationFeature.FLUSH_AFTER_WRITE_VALUE,
true);
+ }
+
+ mapper.setDateFormat(new SimpleDateFormat(dateFormat));
+
+ if (escapeCharsGlobal) {
+ mapper.getFactory().setCharacterEscapes(characterEscapes);
+ }
+ if (escapeCharsClass != null) {
+ try {
+ characterEscapes = (CharacterEscapes)
Class.forName(escapeCharsClass).getConstructor()
+ .newInstance();
+ } catch (Exception e) {
+ throw new Exception(
+ "JsonMapperService: Error instantiating " +
escapeCharsClass
+ + " for " + ESCAPE_CHAR_CLASS );
}
}
- if (primary == null) {
- primary = new JacksonAnnotationIntrospector(); // support default
+
+ getLogger().debug("initialized mapper:" + mapper);
+
+ mapper.getSerializerProvider().setNullValueSerializer(
+ new JsonSerializer<Object>() {
+ @Override
+ public void serialize(Object value, JsonGenerator jgen,
+ SerializerProvider provider) throws IOException
+ {
+ jgen.writeString("");
+
+ }
+ });
+ cacheService = new CacheService(primary);
+ if (cacheService instanceof LogEnabled)
+ {
+
cacheService.enableLogging(getLogger().getChildLogger(cacheService.getClass().getSimpleName()));
getLogger().info(
- "using default introspector:"
- + primary.getClass().getName());
- mapper.setAnnotationIntrospector(primary);
- } else if (primary != null && secondary != null){
- AnnotationIntrospector pair = new AnnotationIntrospectorPair(
- primary, secondary);
- mapper.setAnnotationIntrospector(pair);
- } else {
- mapper.setAnnotationIntrospector(primary);
+ "setting cacheService logger: "
+ + cacheService.getClass().getSimpleName());
}
- if (primary instanceof LogEnabled)
- {
-
((LogEnabled)primary).enableLogging(getLogger().getChildLogger(primary.getClass().getSimpleName()));
- getLogger().info(
- "setting primary introspector logger: "
- + primary.getClass().getSimpleName());
+ if (useJsonPath) {
+ // set it before runtime
+ DefaultJsonPathWrapper djpw = null;
+ try {
+ djpw = new DefaultJsonPathWrapper(this.mapper);
+ getLogger().debug("******** initialized new jsonPath defaults:
" +djpw.getJsonPathDefault());
+ } catch (Exception e) {
+ throw new Exception(
+ "JsonMapperService: Error instantiating " + djpw
+ + " using useJsonPath=" + useJsonPath);
+ }
+
}
- if (secondary instanceof LogEnabled)
- {
-
((LogEnabled)secondary).enableLogging(getLogger().getChildLogger(secondary.getClass().getSimpleName()));
+ }
+
+ private void initDefaultTyping()
+ {
+ if (defaultTypeDefs != null && defaultTypeDefs.length == 2) {
+ DefaultTyping defaultTyping = DefaultTyping
+ .valueOf(defaultTypeDefs[0]);
+ mapper.enableDefaultTypingAsProperty(defaultTyping,
+ defaultTypeDefs[1]);
getLogger().info(
- "setting secondary introspector logger: "
- + secondary.getClass().getSimpleName());
+ "default typing is " + defaultTypeDefs[0] + " with key:"
+ + defaultTypeDefs[1]);
}
+ }
+ private void initFeatures()
+ throws Exception
+ {
if (features != null && !features.isEmpty()) {
- Enumeration<String> enumFeatureKey = features.keys();
- while (enumFeatureKey.hasMoreElements()) {
- String featureKey = enumFeatureKey.nextElement();// e.g.
+ Iterator<String> featureKeys = features.keySet().iterator();
+ while (featureKeys.hasNext()) {
+ String featureKey = featureKeys.next();// e.g.
//
FAIL_ON_EMPTY_BEANS
Boolean featureValue = features.get(featureKey); // e.g.false
String featureType = featureTypes.get(featureKey);
@@ -762,77 +784,65 @@ public class Jackson2MapperService exten
}
}
}
+ }
- if (defaultTypeDefs != null && defaultTypeDefs.length == 2) {
- DefaultTyping defaultTyping = DefaultTyping
- .valueOf(defaultTypeDefs[0]);
- mapper.enableDefaultTypingAsProperty(defaultTyping,
- defaultTypeDefs[1]);
- getLogger().info(
- "default typing is " + defaultTypeDefs[0] + " with key:"
- + defaultTypeDefs[1]);
+ private void initAnnotationInspectors()
+ throws Exception
+ {
+ Iterator<String> aiKeys = annotationInspectors.keySet().iterator();
+ while (aiKeys.hasNext()) {
+ String key = aiKeys.next();
+ String avClass = annotationInspectors.get(key);
+ if (key.equals("primary") && avClass != null) {
+ try {
+ primary = (AnnotationIntrospector)
Class.forName(avClass).getConstructor()
+ .newInstance();
+ } catch (Exception e) {
+ throw new Exception(
+ "JsonMapperService: Error instantiating " + avClass
+ + " for " + key);
+ }
+ } else if (key.equals("secondary") && avClass != null) {
+ try {
+ secondary = (AnnotationIntrospector)
Class.forName(avClass).getConstructor()
+ .newInstance();
+ } catch (Exception e) {
+ throw new Exception(
+ "JsonMapperService: Error instantiating " + avClass
+ + " for " + key);
+ }
+ }
}
-
- getLogger().info("setting date format to:" + dateFormat);
- getLogger().info("cacheFilters is:" + cacheFilters);
- if (!cacheFilters) {
- mapper.configure(SerializationFeature.FLUSH_AFTER_WRITE_VALUE,
true);
+ if (primary == null) {
+ primary = new JacksonAnnotationIntrospector(); // support default
+ getLogger().info(
+ "using default introspector:"
+ + primary.getClass().getName());
+ mapper.setAnnotationIntrospector(primary);
+ } else if (primary != null && secondary != null){
+ AnnotationIntrospector pair = new AnnotationIntrospectorPair(
+ primary, secondary);
+ mapper.setAnnotationIntrospector(pair);
+ } else {
+ mapper.setAnnotationIntrospector(primary);
}
-
- mapper.setDateFormat(new SimpleDateFormat(dateFormat));
- if (escapeCharsGlobal) {
- mapper.getFactory().setCharacterEscapes(characterEscapes);
- }
- if (escapeCharsClass != null) {
- try {
- characterEscapes = (CharacterEscapes)
Class.forName(escapeCharsClass).getConstructor()
- .newInstance();
- } catch (Exception e) {
- throw new Exception(
- "JsonMapperService: Error instantiating " +
escapeCharsClass
- + " for " + ESCAPE_CHAR_CLASS );
- }
- }
-
- getLogger().debug("initialized mapper:" + mapper);
-
- mapper.getSerializerProvider().setNullValueSerializer(
- new JsonSerializer<Object>() {
-
- @Override
- public void serialize(Object value, JsonGenerator jgen,
- SerializerProvider provider) throws IOException,
- JsonProcessingException {
- jgen.writeString("");
-
- }
- });
- cacheService = new CacheService(primary);
- if (cacheService instanceof LogEnabled)
+ if (primary instanceof LogEnabled)
{
-
((LogEnabled)cacheService).enableLogging(getLogger().getChildLogger(cacheService.getClass().getSimpleName()));
+
((LogEnabled)primary).enableLogging(getLogger().getChildLogger(primary.getClass().getSimpleName()));
getLogger().info(
- "setting cacheService logger: "
- + cacheService.getClass().getSimpleName());
+ "setting primary introspector logger: "
+ + primary.getClass().getSimpleName());
}
-
- if (useJsonPath) {
- // set it before runtime
- DefaultJsonPathWrapper djpw = null;
- try {
- djpw = new DefaultJsonPathWrapper(this.mapper);
- getLogger().debug("******** initialized new jsonPath defaults:
" +djpw.getJsonPathDefault());
- } catch (Exception e) {
- throw new Exception(
- "JsonMapperService: Error instantiating " + djpw
- + " using useJsonPath=" + useJsonPath);
- }
+ if (secondary instanceof LogEnabled)
+ {
+
((LogEnabled)secondary).enableLogging(getLogger().getChildLogger(secondary.getClass().getSimpleName()));
+ getLogger().info(
+ "setting secondary introspector logger: "
+ + secondary.getClass().getSimpleName());
}
- // JACKSON-650, Ignore missing filters, may be, because previoulsy a
filter was set (e.g. ignore filter)
- mapper.setFilterProvider(new
SimpleFilterProvider().setFailOnUnknownId(false));
}
-
+
public ObjectMapper getMapper() {
return mapper;
}
Modified:
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/MixinModule.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/MixinModule.java?rev=1844081&r1=1844080&r2=1844081&view=diff
==============================================================================
---
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/MixinModule.java
(original)
+++
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/MixinModule.java
Wed Oct 17 10:20:29 2018
@@ -39,11 +39,4 @@ public final class MixinModule extends S
public void setupModule(SetupContext context) {
context.setMixInAnnotations(this.clazz, this.mixin);
}
-
-// @Override
-// public Object getTypeId()
-// {
-// return null; // unique
-// //return super.getTypeId();
-// }
}
\ No newline at end of file
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -48,9 +48,9 @@ public class SimpleNameIntrospector exte
*/
private static final long serialVersionUID = 1L;
- private List<Class<?>> filteredClasses = new
CopyOnWriteArrayList<Class<?>>();
- private List<String> externalFilterExcludeClasses = new
CopyOnWriteArrayList<String>();
- private List<String> externalFilterIncludeClasses = new
CopyOnWriteArrayList<String>();
+ private List<Class<?>> filteredClasses = new CopyOnWriteArrayList<>();
+ private List<String> externalFilterExcludeClasses = new
CopyOnWriteArrayList<>();
+ private List<String> externalFilterIncludeClasses = new
CopyOnWriteArrayList<>();
// is used only for filtering by class
private AtomicBoolean isExludeType = new AtomicBoolean(false);
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -32,9 +32,17 @@ import java.util.Map;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.json.Rectangle;
-import org.apache.fulcrum.json.TestClass;
+import org.apache.fulcrum.json.jackson.example.Bean;
+import org.apache.fulcrum.json.jackson.example.BeanChild;
+import org.apache.fulcrum.json.jackson.example.Rectangle;
+import org.apache.fulcrum.json.jackson.example.TestClass;
import org.apache.fulcrum.json.jackson.filters.CustomModuleWrapper;
+import org.apache.fulcrum.json.jackson.mixins.BeanMixin;
+import org.apache.fulcrum.json.jackson.mixins.TypedRectangle;
+import org.apache.fulcrum.json.jackson.serializers.TestDeserializer;
+import
org.apache.fulcrum.json.jackson.serializers.TestDummyWrapperDeserializer;
+import org.apache.fulcrum.json.jackson.serializers.TestJsonSerializer;
+import org.apache.fulcrum.json.jackson.serializers.TestSerializer;
import org.apache.fulcrum.testcontainer.BaseUnit4Test;
import org.junit.Before;
import org.junit.Test;
@@ -79,7 +87,7 @@ public class DefaultServiceTest extends
@Test
public void testCustomSerializeWithoutServiceMapper() throws Exception {
ObjectMapper objectMapper = customMapper(true);
- String expected =
"{\"type\":\"org.apache.fulcrum.json.TestClass\",\"container\":{\"type\":\"java.util.HashMap\",\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\"}";
+ String expected =
"{\"type\":\"org.apache.fulcrum.json.jackson.example.TestClass\",\"container\":{\"type\":\"java.util.HashMap\",\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\"}";
String serJson = customAllExceptFilter(objectMapper, new
TestClass("mytest"), TestClass.class,"name");
logger.debug("serJson:"+ serJson);
assertEquals("Serialization with custom mapper failed ",expected,
serJson);
@@ -287,7 +295,7 @@ public class DefaultServiceTest extends
public void testMixinAdapter() throws Exception {
TestJsonSerializer tser = new TestJsonSerializer();
CustomModuleWrapper<TestClass> cmw = new
CustomModuleWrapper<TestClass>(
- tser, null);
+ tser, new TestDummyWrapperDeserializer(TestClass.class));
sc.addAdapter("Collection Adapter", TestClass.class, cmw);
String adapterSer = sc.ser(new TestClass("mytest"));
assertEquals("failed adapter serialization:",
@@ -339,7 +347,7 @@ public class DefaultServiceTest extends
}
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);
+ List<Rectangle> resultList0 =
((Jackson2MapperService)sc).deSerList(serColl, ArrayList.class,
Rectangle.class);
logger.debug("resultList0 class:" +resultList0.getClass());
for (int i = 0; i < 10; i++) {
assertEquals("deser reread size failed", (i * i), resultList0
@@ -505,7 +513,7 @@ public class DefaultServiceTest extends
TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
rectList.add(filteredRect);
}
- Class<?> clazz =
Class.forName("org.apache.fulcrum.json.jackson.TypedRectangle");
+ Class<?> clazz =
Class.forName("org.apache.fulcrum.json.jackson.mixins.TypedRectangle");
// no type cft.
https://github.com/FasterXML/jackson-databind/issues/303 !!
String jsonResult = sc.serializeOnlyFilter(rectList, clazz, true,"w");
assertEquals("[{\"w\":0},{\"w\":1}]",jsonResult);
@@ -519,9 +527,9 @@ public class DefaultServiceTest extends
TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
rectList.add(filteredRect);
}
- Class<?> clazz =
Class.forName("org.apache.fulcrum.json.jackson.TypedRectangle");
+ Class<?> clazz =
Class.forName("org.apache.fulcrum.json.jackson.mixins.TypedRectangle");
sc.addAdapter("Collection Adapter", Object.class,
TypedRectangle.Mixins.class);
-
assertEquals("[\"java.util.ArrayList\",[{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":1}]]",
+
assertEquals("[\"java.util.ArrayList\",[{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":1}]]",
sc.serializeOnlyFilter(rectList, clazz, true, "w"));
}
@Test
Added:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java?rev=1844081&view=auto
==============================================================================
---
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java
(added)
+++
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java
Wed Oct 17 10:20:29 2018
@@ -0,0 +1,108 @@
+package org.apache.fulcrum.json.jackson;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import static org.junit.Assert.assertEquals;
+
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.fulcrum.json.JsonService;
+import org.apache.fulcrum.json.jackson.example.Bean;
+import org.apache.fulcrum.json.jackson.example.Rectangle;
+import org.apache.fulcrum.testcontainer.BaseUnit4Test;
+import org.junit.Before;
+import org.junit.Test;
+
+
+
+/**
+ * More Jackson2 JSON Test
+ *
+ * Test with clearing mixins
+ *
+ * @author gk
+ * @version $Id$
+ */
+public class Jackson2MapperTest extends BaseUnit4Test {
+
+ private JsonService sc = null;
+ Logger logger;
+
+ @Before
+ public void setUp() throws Exception {
+ sc = (JsonService) this.lookup(JsonService.ROLE);
+ logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
+ // clear
+ ((Jackson2MapperService)sc).setMixins(null,null);
+ logger.debug( "cleared mixins");
+ }
+
+ @Test
+ public void testSerializeWithCustomFilter() throws Exception {
+ Bean bean = new Bean();
+ bean.setName("joe");
+ bean.setAge(12);
+ String filteredBean = sc.serializeOnlyFilter(bean, Bean.class,
"name");
+ assertEquals("Ser filtered Bean failed ", "{\"name\":\"joe\"}",
filteredBean);
+
+ Rectangle rectangle = new Rectangle(5, 10);
+ rectangle.setName("jim");
+ String filteredRectangle = sc.serializeOnlyFilter(rectangle,
+ Rectangle.class, "w", "name");
+ assertEquals("Ser filtered Rectangle failed ",
+ "{\"w\":5,\"name\":\"jim\"}", filteredRectangle);
+ }
+
+ // analog seralizeAllExcept
+ @Test
+ public void testSerializeOnlyFilterMultipleFilterChanges() throws
Exception {
+ Bean bean = new Bean();
+ bean.setName("joe");
+ bean.setAge(12);
+
+ Rectangle rectangle = new Rectangle(5, 10);
+ rectangle.setName("jim");
+
+ String filteredBean = sc.serializeOnlyFilter(bean, Bean.class,
"name");
+ assertEquals("global Ser filtered Bean failed ", "{\"name\":\"joe\"}",
filteredBean);
+
+ String filteredRectangle = sc.serializeOnlyFilter(rectangle,
+ Rectangle.class, "w", "name");
+ assertEquals("global Ser filtered Rectangle failed ",
+ "{\"w\":5,\"name\":\"jim\"}", filteredRectangle);
+
+ filteredBean = ((Jackson2MapperService)sc).serializeOnlyFilter(bean,
new Class[]{ Bean.class}, true, "age");
+ assertEquals("Another Global Ser filtered Bean failed ",
"{\"age\":12}", filteredBean);
+
+ filteredRectangle = ((Jackson2MapperService)sc).serializeOnlyFilter(
+ rectangle, new Class[] { Rectangle.class}, true, "h", "name");
+ assertEquals("Local Ser filtered Rectangle failed ",
+ "{\"h\":10,\"name\":\"jim\"}", filteredRectangle);
+
+ // if refresh would be false, this would fail
+ filteredBean = sc.serializeOnlyFilter(bean, Bean.class, "name");
+ assertEquals("global Ser filtered Bean failed ", "{\"name\":\"joe\"}",
filteredBean);
+
+ filteredRectangle = sc.serializeOnlyFilter(rectangle,
+ Rectangle.class, "w", "name");
+ assertEquals("global Ser filtered Rectangle failed ",
+ "{\"w\":5,\"name\":\"jim\"}", filteredRectangle);
+ }
+
+}
Propchange:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/Jackson2MapperTest.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -34,14 +34,17 @@ import java.util.Map;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.json.Rectangle;
-import org.apache.fulcrum.json.TestClass;
+import org.apache.fulcrum.json.jackson.example.Bean;
+import org.apache.fulcrum.json.jackson.example.Rectangle;
+import org.apache.fulcrum.json.jackson.example.TestClass;
+import org.apache.fulcrum.json.jackson.mixins.BeanMixin;
+import org.apache.fulcrum.json.jackson.mixins.RectangleMixin;
+import org.apache.fulcrum.json.jackson.mixins.RectangleMixin2;
+import org.apache.fulcrum.json.jackson.mixins.TypedRectangle;
import org.apache.fulcrum.testcontainer.BaseUnit4Test;
import org.junit.Before;
import org.junit.Test;
-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;
@@ -54,7 +57,7 @@ import com.fasterxml.jackson.databind.Ob
* @version $Id$
*/
public class JacksonMapperEnabledDefaultTypingTest extends BaseUnit4Test {
- public static 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.jackson.example.TestClass\",\"container\":{\"type\":\"java.util.HashMap\",\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}";
private JsonService sc = null;
Logger logger;
@@ -101,36 +104,36 @@ public class JacksonMapperEnabledDefault
}
@Test
public void testSerializeWithCustomFilter() throws Exception {
- Bean bean = new Bean();
- bean.setName("joe");
- String filteredBean = sc.serializeOnlyFilter(bean, Bean.class,
"name");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
+ String bean = sc.serializeOnlyFilter(filteredBean, Bean.class, "name");
assertEquals(
"Ser filtered Bean failed ",
-
"{\"type\":\"org.apache.fulcrum.json.jackson.Bean\",\"name\":\"joe\"}",
- filteredBean);
+
"{\"type\":\"org.apache.fulcrum.json.jackson.example.Bean\",\"name\":\"joe\"}",
+ bean);
- Rectangle rectangle = new Rectangle(5, 10);
- rectangle.setName("jim");
- String filteredRectangle = sc.serializeOnlyFilter(rectangle,
+ Rectangle filteredRectangle = new Rectangle(5, 10);
+ filteredRectangle.setName("jim");
+ String rectangle = sc.serializeOnlyFilter(filteredRectangle,
Rectangle.class, "w", "name");
assertEquals("Ser filtered Rectangle failed ",
- "{\"w\":5,\"name\":\"jim\"}", filteredRectangle );
+ "{\"w\":5,\"name\":\"jim\"}", rectangle);
}
@Test
public void testSerializationCollectionWithFilter() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
assertEquals(
"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}]]",
+
"['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0','age':0},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1','age':1},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2','age':2},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe3','age':3},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe4','age':4},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe5','age':5},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe6','age':6},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe7','age':7},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe8','age':8},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe9','age':9}]]",
result.replace('"', '\''));
Collection<Rectangle> resultDeSer = checkDeserCollection(result,
List.class, Rectangle.class);
@@ -156,10 +159,10 @@ public class JacksonMapperEnabledDefault
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
@@ -179,10 +182,10 @@ public class JacksonMapperEnabledDefault
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
@@ -202,29 +205,29 @@ public class JacksonMapperEnabledDefault
Rectangle filteredRectangle = new Rectangle(5, 10);
filteredRectangle.setName("jim");
String serRect = sc
- .addAdapter("M4RMixin", Rectangle.class, Mixin.class).ser(
+ .addAdapter("M4RMixin", Rectangle.class,
RectangleMixin.class).ser(
filteredRectangle);
assertEquals("Ser failed ", "{\"width\":5}", serRect);
}
@Test
public void testSerializeWith2Mixins() throws Exception {
- Bean bean = new Bean();
- bean.setName("joe");
- Rectangle rectangle = new Rectangle(5, 10);
- rectangle.setName("jim");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
+ Rectangle filteredRectangle = new Rectangle(5, 10);
+ filteredRectangle.setName("jim");
String serRect = sc.addAdapter("M4RMixin2", Rectangle.class,
- Mixin2.class).ser(rectangle);
+ RectangleMixin2.class).ser(filteredRectangle);
assertEquals("Ser failed ", "{\"name\":\"jim\",\"width\":5}", serRect);
//
- String filteredBean = sc.addAdapter("M4RBeanMixin", Bean.class,
- BeanMixin.class).ser(bean);;
+ String bean = sc.addAdapter("M4RBeanMixin", Bean.class,
+ BeanMixin.class).ser(filteredBean);;
assertEquals(
"Ser filtered Bean failed ",
-
"{\"type\":\"org.apache.fulcrum.json.jackson.Bean\",\"name\":\"joe\"}",
- filteredBean);
+
"{\"type\":\"org.apache.fulcrum.json.jackson.example.Bean\",\"name\":\"joe\"}",
+ bean);
}
@Test
public void testSerializeWithMixinAndFilter() throws Exception {
@@ -237,76 +240,76 @@ public class JacksonMapperEnabledDefault
String bean = sc.serializeOnlyFilter(filteredBean, Bean.class,
"profession");
assertEquals(
"Ser filtered Bean failed ",
- "{\"type\":\"org.apache.fulcrum.json.jackson.Bean\"}",
+ "{\"type\":\"org.apache.fulcrum.json.jackson.example.Bean\"}",
bean);
}
@Test
public void testSerializeWithUnregisteredMixinAndFilter() throws Exception
{
- Bean bean = new Bean();
- bean.setName("joe");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
//
sc.addAdapter("M4RBeanMixin", Bean.class,
BeanMixin.class)
.addAdapter("M4RBeanMixin", Bean.class,
null);
// now profession is used after cleaning adapter
- String filteredBean = sc.serializeOnlyFilter(bean, Bean.class,
"profession");
+ String bean = sc.serializeOnlyFilter(filteredBean, Bean.class,
"profession");
assertEquals(
"Ser filtered Bean failed ",
-
"{\"type\":\"org.apache.fulcrum.json.jackson.Bean\",\"profession\":\"\"}",
- filteredBean);
+
"{\"type\":\"org.apache.fulcrum.json.jackson.example.Bean\",\"profession\":\"\"}",
+ bean);
}
@Test
public void testMultipleSerializingWithMixinAndFilter() throws Exception {
- Rectangle rectangle = new Rectangle(5, 10);
- rectangle.setName("jim");
+ Rectangle filteredRectangle = new Rectangle(5, 10);
+ filteredRectangle.setName("jim");
//
sc.addAdapter("M4RMixin2", Rectangle.class,
- Mixin2.class);
+ RectangleMixin2.class);
// if serialization is done Jackson clean cache
- String rectangle0 = sc.ser(rectangle,Rectangle.class,true);
+ String rectangle0 = sc.ser(filteredRectangle,Rectangle.class,true);
assertEquals(
"Ser filtered Rectangle failed ",
"{\"name\":\"jim\",\"width\":5}",
rectangle0);
// filtering out name, using width from mixin2 as a second filter
- String rectangle1 = sc.serializeOnlyFilter(rectangle, Rectangle.class,
true, "width");
+ String rectangle = sc.serializeOnlyFilter(filteredRectangle,
Rectangle.class, true, "width");
assertEquals(
"Ser filtered Rectangle failed ",
"{\"width\":5}",
- rectangle1);
+ rectangle);
// default for mixin
- String rectangle2 = sc.ser(rectangle);
+ String rectangle1 = sc.ser(filteredRectangle);
assertEquals(
"Ser filtered Rectangle failed ",
"{\"name\":\"jim\",\"width\":5}",
- rectangle2);
+ rectangle1);
}
@Test
public void testSerializationCollectionWithMixin() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.addAdapter("M4RMixin", Bean.class, BeanMixin.class)
.ser(beanList);
assertEquals(
"Serialization of beans failed ",
-
"['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe3'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe4'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe5'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe6'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe7'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe8'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe9'}]]",
+
"['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe3'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe4'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe5'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe6'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe7'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe8'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe9'}]]",
result.replace('"', '\''));
}
@Test
public void testDeSerializationCollectionWithMixin() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.addAdapter("M4RMixin", Bean.class, BeanMixin.class)
.ser(beanList);
@@ -325,17 +328,17 @@ public class JacksonMapperEnabledDefault
components.add(new Rectangle(25, 3));
components.add(new Rectangle(250, 30));
for (int i = 0; i < 3; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- components.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ components.add(filteredBean);
}
- sc.addAdapter("M4RMixin", Rectangle.class, Mixin.class).addAdapter(
+ sc.addAdapter("M4RMixin", Rectangle.class,
RectangleMixin.class).addAdapter(
"M4BeanRMixin", Bean.class, BeanMixin.class);
String serRect = sc.ser(components);
assertEquals(
"Serialization failed ",
-
"['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.Rectangle','width':25},{'type':'org.apache.fulcrum.json.Rectangle','width':250},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2'}]]",
+
"['java.util.ArrayList',[{'type':'org.apache.fulcrum.json.jackson.example.Rectangle','width':25},{'type':'org.apache.fulcrum.json.jackson.example.Rectangle','width':250},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2'}]]",
serRect.replace('"', '\''));
}
@Test
@@ -346,25 +349,7 @@ public class JacksonMapperEnabledDefault
TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
rectList.add(filteredRect);
}
-
assertEquals("[\"java.util.ArrayList\",[{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":1}]]",
+
assertEquals("[\"java.util.ArrayList\",[{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":1}]]",
sc.serializeOnlyFilter(rectList, TypedRectangle.class, "w"));
}
-
- // @JsonFilter("myFilter")
-
- public static abstract class Mixin2 {
- void MixIn2(int w, int h) {
- }
-
- @JsonProperty("width")
- abstract int getW(); // rename property
-
- @JsonIgnore
- abstract int getH();
-
- @JsonIgnore
- abstract int getSize(); // exclude
-
- abstract String getName();
- }
}
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=1844081&r1=1844080&r2=1844081&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
Wed Oct 17 10:20:29 2018
@@ -35,14 +35,17 @@ import java.util.TimeZone;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.json.Rectangle;
-import org.apache.fulcrum.json.TestClass;
+import org.apache.fulcrum.json.jackson.example.Bean;
+import org.apache.fulcrum.json.jackson.example.Rectangle;
+import org.apache.fulcrum.json.jackson.example.TestClass;
+import org.apache.fulcrum.json.jackson.mixins.BeanMixin;
+import org.apache.fulcrum.json.jackson.mixins.RectangleMixin;
+import org.apache.fulcrum.json.jackson.mixins.RectangleMixin2;
+import org.apache.fulcrum.json.jackson.mixins.TypedRectangle;
import org.apache.fulcrum.testcontainer.BaseUnit4Test;
import org.junit.Before;
import org.junit.Test;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
@@ -186,13 +189,13 @@ public class JacksonMapperEnabledDefault
}
@Test
public void testSerializeWithCustomFilter() throws Exception {
- Bean bean = new Bean();
- bean.setName("joe");
- String filteredBean = sc.serializeOnlyFilter(bean, "name");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
+ String bean = sc.serializeOnlyFilter(filteredBean, "name");
assertEquals(
"Ser filtered Bean failed ",
"{\"name\":\"joe\"}",
- filteredBean);
+ bean);
Rectangle filteredRectangle = new Rectangle(5, 10);
filteredRectangle.setName("jim");
String rectangle = sc.serializeOnlyFilter(filteredRectangle,
@@ -205,28 +208,28 @@ public class JacksonMapperEnabledDefault
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
- String filteredResult = sc.serializeOnlyFilter(beanList, Bean.class,
"name",
+ String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
assertEquals(
"Serialization of beans failed ",
-
"[{'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}]",
- filteredResult.replace('"', '\''));
+
"[{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0','age':0},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1','age':1},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2','age':2},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe3','age':3},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe4','age':4},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe5','age':5},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe6','age':6},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe7','age':7},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe8','age':8},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe9','age':9}]",
+ result.replace('"', '\''));
}
@Test
public void testDeserializationCollectionWithFilter() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
- String filteredResult = sc.serializeOnlyFilter(beanList, Bean.class,
"name",
+ String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
//System.out.println("res:"+result);
// could not use TypeReference as JSON string has no type set for
array:
@@ -234,8 +237,8 @@ public class JacksonMapperEnabledDefault
// need JSON String that contains type id (for subtype of
java.util.Collection)
//
// -> need to use constructCollectionType
- Class clazz = Class.forName("org.apache.fulcrum.json.jackson.Bean");
- List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(filteredResult,
new ArrayList(),clazz);
+ Class clazz =
Class.forName("org.apache.fulcrum.json.jackson.example.Bean");
+ List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(result, new
ArrayList(),clazz);
assertTrue("DeSer failed ", beanList2.size() == 10);
for (Bean bean : beanList2) {
assertEquals("DeSer failed ", Bean.class, bean.getClass());
@@ -246,17 +249,17 @@ public class JacksonMapperEnabledDefault
throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
"age");
// could not use TypeReference as JSON string has no type set for
array:
// Exception: need JSON String that contains type id (for subtype of
java.util.List)
// -> need to use constructCollectionType
- Class clazz = Class.forName("org.apache.fulcrum.json.jackson.Bean");
+ Class clazz =
Class.forName("org.apache.fulcrum.json.jackson.example.Bean");
List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(result, new
ArrayList(),clazz);
//Object beanList2 = sc.deSer(result, List.class);
assertTrue("DeSer failed ", beanList2 instanceof List);
@@ -274,28 +277,28 @@ public class JacksonMapperEnabledDefault
Rectangle filteredRectangle = new Rectangle(5, 10);
filteredRectangle.setName("jim");
String serRect = sc
- .addAdapter("M4RMixin", Rectangle.class, Mixin.class).ser(
+ .addAdapter("M4RMixin", Rectangle.class,
RectangleMixin.class).ser(
filteredRectangle);
assertEquals("Ser failed ", "{\"width\":5}", serRect);
}
@Test
public void testSerializeWith2Mixins() throws Exception {
- Bean bean = new Bean();
- bean.setName("joe");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
Rectangle filteredRectangle = new Rectangle(5, 10);
filteredRectangle.setName("jim");
String serRect = sc.addAdapter("M4RMixin2", Rectangle.class,
- Mixin2.class).ser(filteredRectangle);
+ RectangleMixin2.class).ser(filteredRectangle);
assertEquals("Ser failed ", "{\"name\":\"jim\",\"width\":5}", serRect);
//
- String filteredBean = sc.addAdapter("M4RBeanMixin", Bean.class,
- BeanMixin.class).ser(bean);;
+ String bean = sc.addAdapter("M4RBeanMixin", Bean.class,
+ BeanMixin.class).ser(filteredBean);;
assertEquals(
"Ser filtered Bean failed ",
"{\"name\":\"joe\"}",
- filteredBean);
+ bean);
}
@Test
public void testSerializeWithMixinAndFilter() throws Exception {
@@ -312,74 +315,74 @@ public class JacksonMapperEnabledDefault
}
@Test
public void testSerializeWithUnregisteredMixinAndFilter() throws Exception
{
- Bean bean = new Bean();
- bean.setName("joe");
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe");
sc.addAdapter("M4RBeanMixin", Bean.class,
BeanMixin.class)
.addAdapter("M4RBeanMixin", Bean.class,
null);
// now profession is used after cleaning adapter
- String filteredBeanSer = sc.serializeOnlyFilter(bean, Bean.class,
"profession");
+ String bean = sc.serializeOnlyFilter(filteredBean, Bean.class,
"profession");
assertEquals(
"Ser filtered Bean failed ",
"{\"profession\":\"\"}",
- filteredBeanSer);
+ bean);
}
@Test
public void testMultipleSerializingWithMixinAndFilter() throws Exception {
- Rectangle rectangle = new Rectangle(5, 10);
- rectangle.setName("jim");
+ Rectangle filteredRectangle = new Rectangle(5, 10);
+ filteredRectangle.setName("jim");
sc.addAdapter("M4RMixin2", Rectangle.class,
- Mixin2.class);
+ RectangleMixin2.class);
// if serialization is done Jackson clean cache
- String rectangle0 = sc.ser(rectangle,Rectangle.class,true);
+ String rectangle0 = sc.ser(filteredRectangle,Rectangle.class,true);
assertEquals(
"Ser filtered Rectangle failed ",
"{\"name\":\"jim\",\"width\":5}",
rectangle0);
// filtering out name, using width from mixin2 as a second filter
- String rectangle1 = sc.serializeOnlyFilter(rectangle, Rectangle.class,
true, "width");
+ String rectangle = sc.serializeOnlyFilter(filteredRectangle,
Rectangle.class, true, "width");
assertEquals(
"Ser filtered Rectangle failed ",
"{\"width\":5}",
- rectangle1);
+ rectangle);
// default for mixin
- String rectangle2 = sc.ser(rectangle);
+ String rectangle1 = sc.ser(filteredRectangle);
assertEquals(
"Ser filtered Rectangle failed ",
"{\"name\":\"jim\",\"width\":5}",
- rectangle2);
+ rectangle1);
}
@Test
public void testSerializationCollectionWithMixin() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.addAdapter("M4RMixin", Bean.class, BeanMixin.class)
.ser(beanList);
assertEquals(
"Serialization of beans failed ",
-
"[{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe3'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe4'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe5'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe6'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe7'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe8'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe9'}]",
+
"[{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe3'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe4'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe5'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe6'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe7'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe8'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe9'}]",
result.replace('"', '\''));
}
@Test
public void testDeSerializationCollectionWithMixin() throws Exception {
List<Bean> beanList = new ArrayList<Bean>();
for (int i = 0; i < 10; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- beanList.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ beanList.add(filteredBean);
}
String result = sc.addAdapter("M4RMixin", Bean.class, BeanMixin.class)
.ser(beanList);
logger.debug("result:::"+ result);
// Type List.class / TypeReference -> Exception: need JSON String that
contains type id (for subtype of java.util.List)
- // Type: Bean.class -> Exception: Can not deserialize instance of
org.apache.fulcrum.json.jackson.Bean out of START_ARRAY token
+ // Type: Bean.class -> Exception: Can not deserialize instance of
org.apache.fulcrum.json.jackson.example.Bean out of START_ARRAY token
// -> need to use constructCollectionType
List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(result, new
ArrayList(),Bean.class);
@@ -394,18 +397,18 @@ public class JacksonMapperEnabledDefault
components.add(new Rectangle(25, 3));
components.add(new Rectangle(250, 30));
for (int i = 0; i < 3; i++) {
- Bean bean = new Bean();
- bean.setName("joe" + i);
- bean.setAge(i);
- components.add(bean);
+ Bean filteredBean = new Bean();
+ filteredBean.setName("joe" + i);
+ filteredBean.setAge(i);
+ components.add(filteredBean);
}
// property w->width, BeanMixin: name ignore other properties
- sc.addAdapter("M4RMixin", Rectangle.class, Mixin.class).addAdapter(
+ sc.addAdapter("M4RMixin", Rectangle.class,
RectangleMixin.class).addAdapter(
"M4BeanRMixin", Bean.class, BeanMixin.class);
String serRect = sc.ser(components);
assertEquals(
"Serialization failed ",
-
"[{'type':'org.apache.fulcrum.json.Rectangle','width':25},{'type':'org.apache.fulcrum.json.Rectangle','width':250},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2'}]",
+
"[{'type':'org.apache.fulcrum.json.jackson.example.Rectangle','width':25},{'type':'org.apache.fulcrum.json.jackson.example.Rectangle','width':250},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe0'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe1'},{'type':'org.apache.fulcrum.json.jackson.example.Bean','name':'joe2'}]",
serRect.replace('"', '\''));
}
@Test
@@ -416,23 +419,10 @@ public class JacksonMapperEnabledDefault
TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
rectList.add(filteredRect);
}
-
assertEquals("[{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":1}]",
+
assertEquals("[{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.mixins.TypedRectangle\",\"w\":1}]",
sc.serializeOnlyFilter(rectList, TypedRectangle.class, true,
"w"));
}
-
- public static abstract class Mixin2 {
- void MixIn2(int w, int h) {
- }
- @JsonProperty("width")
- abstract int getW(); // rename property
- @JsonIgnore
- abstract int getH();
- @JsonIgnore
- abstract int getSize(); // exclude
- abstract String getName();
- }
-
public static class DateKeyMixin {
// @JsonCreator
// static Object create(Map<String, Object> map) {