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) {


Reply via email to