This is an automated email from the ASF dual-hosted git repository. gk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-json.git
commit 5926e3d0075176f5268ac76dad95ee413c90917b Author: Georg Kallidis <[email protected]> AuthorDate: Fri Nov 14 11:36:04 2025 +0100 Add three tests in module jackson2 to JacksonMapperTest concerning Lists,Maps and Mixins. --- .../fulcrum/json/jackson/JacksonMapperTest.java | 96 +++++++++++++++++++++- .../apache/fulcrum/json/jackson/example/Bean.java | 6 ++ .../{example/Bean.java => mixins/BeanMixin3.java} | 48 ++++++----- 3 files changed, 127 insertions(+), 23 deletions(-) diff --git a/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java b/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java index 7799ee4..2bbcfd4 100644 --- a/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java +++ b/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java @@ -36,6 +36,7 @@ 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.BeanMixin3; import org.apache.fulcrum.json.jackson.mixins.RectangleMixin; import org.apache.fulcrum.json.jackson.mixins.RectangleMixin2; import org.apache.fulcrum.testcontainer.BaseUnit5Test; @@ -74,12 +75,101 @@ public class JacksonMapperTest extends BaseUnit5Test { assertEquals(preDefinedOutput, serJson, "Serialization failed "); } - @Disabled + //@Disabled + @Test public void testDeSerialize() throws Exception { String serJson = sc.ser(new TestClass("mytest")); Object deson = sc.deSer(serJson, TestClass.class); assertEquals(TestClass.class, deson.getClass(), "DeSer failed "); } + + @Test + public void testConvertToList() throws Exception { + + BeanMixin3 bean = new BeanMixin3(); + bean.setName("joe2"); + bean.setAge(12); + + String serJson = sc.ser(bean); + logger.debug("serJson: "+ serJson); + + // basic convert + Object deson = sc.deSer(serJson, BeanMixin3.class); + logger.debug("deson: "+ deson); + assertEquals(BeanMixin3.class, deson.getClass(), "DeSer failed "); + String ser = sc.ser( deson ); + logger.debug("ser: "+ ser); + + // convert list-type to List, requires wrapped class + List<BeanMixin3> beanList = new ArrayList<BeanMixin3>(); + beanList.add( bean ); + String serListBean = sc.ser( beanList ); + Collection<BeanMixin3> deson3 = ((Jackson2MapperService) sc).deSerCollectionWithType(serListBean, List.class, BeanMixin3.class); + logger.debug("deson3: "+ deson3); + logger.debug("deson2 class: "+ deson3.getClass()); + + Object serList = sc.ser( deson3 ); + logger.debug("serList: "+ serList); + + logger.debug("serList class: "+ deson3.getClass()); + List resultList = ((List)deson3); + logger.debug("serList first element: "+ resultList.get( 0) ); + assertEquals( BeanMixin3.class, resultList.get( 0).getClass() ); + BeanMixin3 bm3 = (BeanMixin3) resultList.get( 0); + assertEquals("joe2", bm3.getName() ); + } + + @Test + public void testDifferentMixinStyles() throws Exception { + Bean bean = new Bean(); + bean.setName("joe2"); + bean.setAge(12); + + String serJson = ((Jackson2MapperService) sc).getMapper() + .addMixIn(Bean.class, BeanMixin3.class) + .writer() + .forType( Bean.class ) + .writeValueAsString( bean ); + String serJson2 = ((Jackson2MapperService) sc) + .withMixinModule( bean, "MoodleMixin", Bean.class, BeanMixin3.class ); + + String serJson3 = ((Jackson2MapperService) sc) + .setMixins(Bean.class, BeanMixin3.class ) + .writeValueAsString( bean ); + logger.debug("serJson: "+ serJson); + assertTrue( serJson.equals( serJson2 ) ); + assertTrue( serJson2.equals( serJson3 ) ); + + } + + @Test + public void testMixinConvertToMap() throws Exception { + Bean bean = new Bean(); + bean.setName("joe2"); + bean.setAge(12); + + String serJson = ((Jackson2MapperService) sc).getMapper() + .addMixIn(Bean.class, BeanMixin3.class) + .writer() + .forType( Bean.class ) + .writeValueAsString( bean ); + + logger.debug("serJson: "+ serJson); + + // convert from class to Map + Map targetMap = sc.deSer(serJson, Map.class); + logger.debug("deson2: "+ targetMap); + logger.debug("deson2 class: "+ targetMap.getClass()); + Map<String,Object> deson2 = ((Map)targetMap); + for (Map.Entry<String, Object> entry : deson2.entrySet()) + { + String key = entry.getKey(); + Object val = entry.getValue(); + logger.debug("key class: "+ key + ", value:" + val); + } + assertEquals("joe2", deson2.get("bean.name[0]") ); + } + @Test public void testConvertWithFilteredpropsMixin() throws Exception { Rectangle rectangle = new Rectangle(5, 10); @@ -130,7 +220,6 @@ public class JacksonMapperTest extends BaseUnit5Test { } @Test public void testSerializationCollectionWithFilter() throws Exception { - List<Bean> beanList = new ArrayList<>(); for (int i = 0; i < 10; i++) { Bean filteredBean = new Bean(); @@ -165,7 +254,7 @@ public class JacksonMapperTest extends BaseUnit5Test { @Test public void testDeserializationCollectionWithFilter() throws Exception { - + // prepare List<Bean> beanList = new ArrayList<Bean>(); for (int i = 0; i < 10; i++) { Bean filteredBean = new Bean(); @@ -175,6 +264,7 @@ public class JacksonMapperTest extends BaseUnit5Test { } String result = sc.serializeOnlyFilter(beanList, Bean.class, "name", "age"); + // test List<Bean> beanList2 = (List<Bean>) ((Jackson2MapperService) sc) .deSerCollectionWithType(result, List.class, Bean.class); assertTrue(beanList2.size() == 10, "DeSer failed "); diff --git a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java b/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java index 71c9fb2..5fac2ec 100644 --- a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java +++ b/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java @@ -45,4 +45,10 @@ public class Bean { this.profession = profession; } + + @Override + public String toString() + { + return "Bean { name: "+ getName() + ", age: " + getAge()+ ", profession:" + profession + " }"; + } } diff --git a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java b/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/BeanMixin3.java similarity index 50% copy from jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java copy to jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/BeanMixin3.java index 71c9fb2..2fb149b 100644 --- a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Bean.java +++ b/jackson2/src/test/org/apache/fulcrum/json/jackson/mixins/BeanMixin3.java @@ -1,4 +1,5 @@ -package org.apache.fulcrum.json.jackson.example; +package org.apache.fulcrum.json.jackson.mixins; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -17,32 +18,39 @@ package org.apache.fulcrum.json.jackson.example; * specific language governing permissions and limitations * under the License. */ -public class Bean { - private String name; - private int age = -1; - public String profession; - public Bean() { - } - public String getName() { - return name; - } +import org.apache.fulcrum.json.jackson.example.Bean; - public void setName(String name) { - this.name = name; - } +import com.fasterxml.jackson.annotation.JsonGetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; - public int getAge() { - return age; +@JsonIgnoreProperties(allowGetters = true) +public class BeanMixin3 extends Bean { + + public BeanMixin3() { } - public void setAge(int age) { - this.age = age; + @Override + @JsonProperty("name") + @JsonGetter("bean.name[0]") + @JsonSetter("name") + public String getName() { + return super.getName(); } - public void setProfession( String profession ) + + @JsonProperty("profession") + @JsonGetter("bean.profession[0]") + public String getProfession() { + return super.profession; + } + + @Override + public String toString() { - this.profession = profession; - + return "BeanMixin3 { name: "+ getName() + ", age: " + getAge()+ ", " + super.toString() + " }"; } } +
