Author: gk
Date: Fri May 16 13:40:50 2014
New Revision: 1595197

URL: http://svn.apache.org/r1595197
Log:
Added another test file 
JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
Added tests for serializing collection with filter method and TypedReference in 
DefaultServiceTest.java
Added test for serializing collection with filter 
methodJacksonMapperEnabledDefaultTypingTest.java
Added test for new method in JacksonMapperTest.java

Added:
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
   (with props)
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
   (with props)
Modified:
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTypingTest.java
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java

Modified: 
turbine/fulcrum/trunk/json/jackson2/src/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=1595197&r1=1595196&r2=1595197&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
 Fri May 16 13:40:50 2014
@@ -240,6 +240,33 @@ public class DefaultServiceTest extends 
                 "Ser filtered Rectangle failed ",
                 "{\"w\":5}",
                 rectangle);
+
+    }
+    
+    public void testSerializeCollectionWithOnlyFilterAndType() throws 
Exception {
+        
+        List<TypedRectangle> rectList = new ArrayList<TypedRectangle>();
+        for (int i = 0; i < 2; i++) {
+            TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
+            rectList.add(filteredRect);
+        }
+        Class clazz = 
Class.forName("org.apache.fulcrum.json.jackson.TypedRectangle");
+        // no type cft. 
https://github.com/FasterXML/jackson-databind/issues/303 !!
+        
assertTrue("[{\"w\":0},{\"w\":1}]".equals(sc.serializeOnlyFilter(rectList, 
clazz, true,"w")));
+        // need mixin in object class!
+        sc.addAdapter("Collection Adapter", Object.class, 
TypedRectangle.Mixins.class);
+        
assertTrue("[\"java.util.ArrayList\",[{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":0},{\"type\":\"org.apache.fulcrum.json.jackson.TypedRectangle\",\"w\":1}]]".equals(sc.serializeOnlyFilter(rectList,
 clazz, true, "w")));
+    }
+    
+    public void testSerializeCollectionWithTypedReference() throws Exception {
+        
+        List<TypedRectangle> rectList = new ArrayList<TypedRectangle>();
+        for (int i = 0; i < 2; i++) {
+            TypedRectangle filteredRect = new TypedRectangle(i, i, "rect" + i);
+            rectList.add(filteredRect);
+        }
+        TypeReference<List<TypedRectangle>> typeRef = new 
TypeReference<List<TypedRectangle>>(){};
+        System.out.println("aa:" 
+((Jackson2MapperService)sc).serCollectionWithTypeReference(rectList,typeRef, 
false));
     }
 
 }

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=1595197&r1=1595196&r2=1595197&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
 Fri May 16 13:40:50 2014
@@ -88,10 +88,10 @@ public class JacksonMapperEnabledDefault
         Map<String, Date> map = new HashMap<String, Date>();
         map.put("date", Calendar.getInstance().getTime());
         String serJson = sc.ser(map);
+        //System.out.println("serJson:" +serJson);
         assertTrue(
                 "Serialize with Adapater failed ",
                 
serJson.matches(".*\"java.util.Date\",\"\\d\\d/\\d\\d/\\d{4}\".*"));
-
     }
 
     public void testDeSerializeDate() throws Exception {
@@ -152,6 +152,8 @@ public class JacksonMapperEnabledDefault
         }
         String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
                 "age");
+        //System.out.println("res:" +result);
+        // serialized json has type for list (ArrayList) and type for elements 
(Bean) -> TypeReference could be used
         TypeReference typeRef = new TypeReference<List<Bean>>(){};
         List<Bean> beanList2 = (List<Bean>) ((Jackson2MapperService) sc)
                 .deSerCollection(result, typeRef, Bean.class);
@@ -327,7 +329,17 @@ public class JacksonMapperEnabledDefault
                 "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'}]]",
                 serRect.replace('"', '\''));
-
+    }
+    
+    public void testSerializeCollectionWithOnlyFilter() throws Exception {
+        
+        List<TypedRectangle> rectList = new ArrayList<TypedRectangle>();
+        for (int i = 0; i < 2; i++) {
+            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}]]",
 
+                sc.serializeOnlyFilter(rectList, TypedRectangle.class, "w"));
     }
     
 
@@ -348,7 +360,4 @@ public class JacksonMapperEnabledDefault
 
         abstract String getName();
     }
-
-    
-
 }

Added: 
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=1595197&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
 (added)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
 Fri May 16 13:40:50 2014
@@ -0,0 +1,393 @@
+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 java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+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.testcontainer.BaseUnitTest;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
+
+
+/**
+ * Jackson2 JSON Test with EnabledDefaultTyping
+ * 
+ * cft. http://wiki.fasterxml.com/JacksonPolymorphicDeserialization
+ * 
+ * @author gk
+ * @version $Id: JacksonMapperEnabledDefaultTypingTest.java 1577518 2014-03-14 
13:21:39Z gk $
+ */
+public class JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test 
extends BaseUnitTest {
+    private JsonService sc = null;
+    Logger logger;
+
+    /**
+     * Constructor for test.
+     * 
+     * @param testName
+     *            name of the test being executed
+     */
+    public 
JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test(String testName) 
{
+        super(testName);
+    }
+
+    public void setUp() throws Exception {
+        super.setUp();
+        sc = (JsonService) this.lookup(JsonService.ROLE);
+        logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
+        ((Jackson2MapperService) sc).getMapper().enableDefaultTypingAsProperty(
+                DefaultTyping.OBJECT_AND_NON_CONCRETE, "type");
+    }
+
+    public void testSerialize() throws Exception {
+        String serJson = sc.ser(new 
JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test(
+                "mytest"));
+        assertEquals(
+                "Set failed ",
+                "{\"name\":\"mytest\"}",
+                serJson);
+    }
+
+    public void testDeSerialize() throws Exception {
+        String serJson = sc.ser(new TestClass("mytest"));
+        Object deson = sc.deSer(serJson, TestClass.class);
+        assertEquals("DeSer failed ", TestClass.class, deson.getClass());
+    }
+
+    public void testSerializeDateWithDefaultDateFormat() throws Exception {
+
+        Map<String, Date> map = new HashMap<String, Date>();
+        map.put("date", Calendar.getInstance().getTime());
+        String serJson = sc.ser(map);
+        //System.out.println("serJson:" +serJson);
+        assertTrue(
+                "Serialize with Adapater failed ",
+                
serJson.matches(".*\"java.util.Date\",\"\\d\\d/\\d\\d/\\d{4}\".*"));
+    }
+
+    public void testDeSerializeDate() throws Exception {
+        Map<String, Date> map = new HashMap<String, Date>();
+        map.put("mydate",Calendar.getInstance().getTime());
+        Calendar mydate2 = Calendar.getInstance();
+        mydate2.set(1999, 3, 10);
+        map.put("mydate2",mydate2.getTime());
+        String serJson0 =  sc.ser(map, false);
+        String serJson =  sc.ser(map, Map.class, false);
+        System.out.println("serJson:"+ serJson0);
+        assertEquals(serJson0, serJson);
+        sc.addAdapter("Collection Adapter", Object.class, DateKeyMixin.class);
+        DateKeyMixin serObject =sc.deSer(serJson0, DateKeyMixin.class);
+//        System.out.println("serObject:"+ serObject);
+//        System.out.println("serObject:"+ serObject.mydate.getClass());
+        assertTrue(serObject.mydate instanceof Date);
+        assertTrue(serObject.mydate2 instanceof Date);
+        assertTrue(serObject.mydate2.toString().equals("Sat Apr 10 00:00:00 
CEST 1999"));
+//        System.out.println("serObject:"+ ((Date)serObject.mydate));
+//        System.out.println("serObject:"+ ((Date)serObject.mydate2));
+    }
+
+    public void testSerializeWithCustomFilter() throws Exception {
+        Bean filteredBean = new Bean();
+        filteredBean.setName("joe");
+        String bean = sc.serializeOnlyFilter(filteredBean, Bean.class, "name");
+        assertEquals(
+                "Ser filtered Bean failed ",
+                "{\"name\":\"joe\"}",
+                bean);
+
+        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\"}", rectangle);
+    }
+
+    public void testSerializationCollectionWithFilter() throws Exception {
+
+        List<Bean> beanList = new ArrayList<Bean>();
+        for (int i = 0; i < 10; i++) {
+            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 ",
+                
"[{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe0','age':0},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe1','age':1},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe2','age':2},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe3','age':3},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe4','age':4},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe5','age':5},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe6','age':6},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe7','age':7},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe8','age':8},{'type':'org.apache.fulcrum.json.jackson.Bean','name':'joe9','age':9}]",
+                result.replace('"', '\''));
+    }
+
+    public void testDeserializationCollectionWithFilter() throws Exception {
+
+        List<Bean> beanList = new ArrayList<Bean>();
+        for (int i = 0; i < 10; i++) {
+            Bean filteredBean = new Bean();
+            filteredBean.setName("joe" + i);
+            filteredBean.setAge(i);
+            beanList.add(filteredBean);
+        }
+        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:
+        // com.fasterxml.jackson.databind.JsonMappingException: Unexpected 
token (START_OBJECT), expected VALUE_STRING:
+        // 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(result, new 
ArrayList(),clazz);
+        assertTrue("DeSer failed ", beanList2.size() == 10);
+        for (Bean bean : beanList2) {
+            assertEquals("DeSer failed ", Bean.class, bean.getClass());
+        }
+    }
+
+    public void testDeserializationUnTypedCollectionWithFilter()
+            throws Exception {
+
+        List<Bean> beanList = new ArrayList<Bean>();
+        for (int i = 0; i < 10; i++) {
+            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");
+        List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(result, new 
ArrayList(),clazz);
+        //Object beanList2 = sc.deSer(result, List.class);
+        assertTrue("DeSer failed ", beanList2 instanceof List);
+        assertTrue("DeSer failed ", ((List) beanList2).size() == 10);
+        for (int i = 0; i < ((List) beanList2).size(); i++) {
+            assertTrue("DeSer failed ",
+                    ((List) beanList2).get(i) instanceof Bean);
+            assertTrue("DeSer failed ", ((Bean) ((List) beanList2).get(i))
+                    .getName().equals("joe" + i));
+
+        }
+    }
+
+    public void testSerializeWithMixin() throws Exception {
+        Rectangle filteredRectangle = new Rectangle(5, 10);
+        filteredRectangle.setName("jim");
+        String serRect = sc
+                .addAdapter("M4RMixin", Rectangle.class, Mixin.class).ser(
+                        filteredRectangle);
+        assertEquals("Ser failed ", "{\"width\":5}", serRect);
+    }
+
+    public void testSerializeWith2Mixins() throws Exception {
+        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);
+        assertEquals("Ser failed ", "{\"name\":\"jim\",\"width\":5}", serRect);
+
+        //
+        String bean = sc.addAdapter("M4RBeanMixin", Bean.class,
+                BeanMixin.class).ser(filteredBean);;
+        
+        assertEquals(
+                "Ser filtered Bean failed ",
+                "{\"name\":\"joe\"}",
+                bean);
+    }
+    
+    public void testSerializeWithMixinAndFilter() throws Exception {
+        Bean filteredBean = new Bean();
+        filteredBean.setName("joe");
+        //
+        sc.addAdapter("M4RBeanMixin", Bean.class,
+                BeanMixin.class);
+        // profession was already set to ignore, does not change
+        String bean = sc.serializeOnlyFilter(filteredBean, Bean.class, 
"profession");
+        assertEquals(
+                "Ser filtered Bean failed ",
+                "{}",
+                bean);
+    }
+    
+    public void testSerializeWithUnregisteredMixinAndFilter() throws Exception 
{
+        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 bean = sc.serializeOnlyFilter(filteredBean, Bean.class, 
"profession");
+        assertEquals(
+                "Ser filtered Bean failed ",
+                "{\"profession\":\"\"}",
+                bean);
+    }
+
+    public void testMultipleSerializingWithMixinAndFilter() throws Exception {
+        Rectangle filteredRectangle = new Rectangle(5, 10);
+        filteredRectangle.setName("jim");
+        //
+        sc.addAdapter("M4RMixin2", Rectangle.class,
+                Mixin2.class);
+        
+        // if serialization is done Jackson clean cache
+        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 rectangle = sc.serializeOnlyFilter(filteredRectangle, 
Rectangle.class, true, "width");
+        assertEquals(
+                "Ser filtered Rectangle failed ",
+                "{\"width\":5}",
+                rectangle);
+        // default for mixin
+       String rectangle1 = sc.ser(filteredRectangle);
+       assertEquals(
+              "Ser filtered Rectangle failed ",
+              "{\"name\":\"jim\",\"width\":5}",
+              rectangle1);
+    }
+
+    public void testSerializationCollectionWithMixin() throws Exception {
+
+        List<Bean> beanList = new ArrayList<Bean>();
+        for (int i = 0; i < 10; i++) {
+            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'}]",
+                result.replace('"', '\''));
+    }
+
+    public void testDeSerializationCollectionWithMixin() throws Exception {
+
+        List<Bean> beanList = new ArrayList<Bean>();
+        for (int i = 0; i < 10; i++) {
+            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);
+        System.out.println("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
+        
+        // -> need to use constructCollectionType
+        List<Bean> beanList2 = (List<Bean>)sc.deSerCollection(result, new 
ArrayList(),Bean.class);
+        assertTrue("DeSer failed ", beanList2.size() == 10);
+        for (Bean bean : beanList2) {
+            assertEquals("DeSer failed ", Bean.class, bean.getClass());
+        }
+    }
+
+    public void testSerializationCollectionWithMixins() throws Exception {
+        List components = new ArrayList<Object>();
+        components.add(new Rectangle(25, 3));
+        components.add(new Rectangle(250, 30));
+        for (int i = 0; i < 3; i++) {
+            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(
+                "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'}]",
+                serRect.replace('"', '\''));
+    }
+    
+    public void testSerializeCollectionWithOnlyFilter() throws Exception {
+        
+        List<TypedRectangle> rectList = new ArrayList<TypedRectangle>();
+        for (int i = 0; i < 2; i++) {
+            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}]",
+                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) {
+//            return map; //map.get("date");
+//            //return map.get("date");
+//        }
+        public Object mydate;
+        public Object mydate2;
+    }
+    
+    
+
+}

Propchange: 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java?rev=1595197&r1=1595196&r2=1595197&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
 (original)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
 Fri May 16 13:40:50 2014
@@ -136,7 +136,7 @@ public class JacksonMapperTest extends B
         String result = sc.serializeOnlyFilter(beanList, Bean.class, "name",
                 "age");
         List<Bean> beanList2 = (List<Bean>) ((Jackson2MapperService) sc)
-                .deSerCollection2(result, List.class, Bean.class);
+                .deSerCollectionWithType(result, List.class, Bean.class);
         assertTrue("DeSer failed ", beanList2.size() == 10);
         for (Bean bean : beanList2) {
             assertEquals("DeSer failed ", Bean.class, bean.getClass());
@@ -222,7 +222,7 @@ public class JacksonMapperTest extends B
             rectList.add(filteredRect);
         }
         String serColl = sc.ser(rectList);
-        Collection<Rectangle> resultList0 =  ((Jackson2MapperService) sc) 
.deSerCollection2(serColl, ArrayList.class, Rectangle.class);
+        Collection<Rectangle> resultList0 =  ((Jackson2MapperService) sc) 
.deSerCollectionWithType(serColl, ArrayList.class, Rectangle.class);
         
         for (int i = 0; i < 10; i++) {
             assertEquals("deser reread size failed", (i * i), 
((List<Rectangle>)resultList0)

Added: 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java?rev=1595197&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
 (added)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
 Fri May 16 13:40:50 2014
@@ -0,0 +1,53 @@
+package org.apache.fulcrum.json.jackson;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
+
+
+
+@JsonTypeInfo(include=As.PROPERTY, use=Id.CLASS, property="type")
+public final class TypedRectangle {
+
+// This is only need if no DefaultTyping is set; you have then assign this to 
object if using collections
+    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = 
JsonTypeInfo.As.PROPERTY, property = "type")
+    public static class Mixins {    }
+    
+    private int w, h;
+    private String name;
+ 
+    public TypedRectangle() {
+        // may be is needed for deserialization, if not set otherwise
+    }
+    
+    public TypedRectangle(int w, int h) {
+        this.w = w;
+        this.h = h;
+    }
+
+    public TypedRectangle(int w, int h, String name) {
+        this.w = w;
+        this.h = h;
+        this.name = name;
+    }
+
+    public int getW() {
+        return w;
+    }
+
+    public int getH() {
+        return h;
+    }
+
+    public int getSize() {
+        return w * h;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
\ No newline at end of file

Propchange: 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/TypedRectangle.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to