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


The following commit(s) were added to refs/heads/master by this push:
     new c36958d  Add two convenience methods allow for filtered converting 
with serial/deser from class to class. Adjust slf4j version with other modules, 
update gson to 2.11.0, update fulcrum-yaafi in jackson2 to 2.0.1-SNAPSHOT
c36958d is described below

commit c36958d2cf5c3f23b030f25488e652324ddc6b61
Author: gemkall <[email protected]>
AuthorDate: Thu Jul 18 11:11:09 2024 +0200

    Add two convenience methods allow for filtered converting with serial/deser 
from class to class.
    Adjust slf4j version with other modules, update gson to 2.11.0, update
    fulcrum-yaafi in jackson2 to 2.0.1-SNAPSHOT
---
 .../java/org/apache/fulcrum/json/JsonService.java  | 24 +++++++++++++++++
 gson/pom.xml                                       |  7 +++--
 .../fulcrum/json/gson/GSONBuilderService.java      | 15 +++++++++++
 jackson/pom.xml                                    |  7 +++--
 jackson2/pom.xml                                   |  6 ++---
 .../json/jackson/Jackson2MapperService.java        | 31 ++++++++++++++++++++++
 .../fulcrum/json/jackson/JacksonMapperTest.java    | 19 +++++++++++++
 .../fulcrum/json/jackson/example/Rectangle.java    |  7 +++++
 pom.xml                                            |  9 +++++--
 9 files changed, 112 insertions(+), 13 deletions(-)

diff --git a/api/src/java/org/apache/fulcrum/json/JsonService.java 
b/api/src/java/org/apache/fulcrum/json/JsonService.java
index 8a095ee..bb03f2e 100644
--- a/api/src/java/org/apache/fulcrum/json/JsonService.java
+++ b/api/src/java/org/apache/fulcrum/json/JsonService.java
@@ -119,6 +119,30 @@ public interface JsonService {
         * @throws Exception if serialize collection fails
         */
        <T> Collection<T> deSerCollection(String json, Object collectionType, 
Class<T> elementType) throws Exception;
+       
+       /**
+        * This does a filtered convert, that is serialization and 
deserialization in one call.
+        * 
+        * @param <T>  class type of target object  
+        * @param src the source object
+        * @param type the target class type
+        * @param filterAttrs the attributes (bean like) to be included
+        * @return filtered object
+        * @throws Exception if convert fails
+        */
+        public <T> T convertWithFilter(Object src, Class<T> type, String... 
filterAttrs) throws Exception;
+        
+           /**
+            * This does a filtered convert, that is serialization and 
deserialization in one call.
+            * The target object type T is derived from the source class.
+            * 
+            * @param <T>  class type of target object  
+            * @param src the source object
+            * @param filterAttrs the attributes (bean like) to be included
+            * @return filtered object
+            * @throws Exception if convert fails
+            */
+        public <T> T convertWithFilter(Object src, String... filterAttrs) 
throws Exception;
 
        /**
         * Custom method without caching. Caching is set to <code>false</code> 
for this
diff --git a/gson/pom.xml b/gson/pom.xml
index 34ada05..0873830 100644
--- a/gson/pom.xml
+++ b/gson/pom.xml
@@ -105,13 +105,12 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-nop</artifactId>
-            <version>2.0.7</version>
-            <optional>true</optional>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.7.36</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
         <properties>
-        <gson.version>2.10.1</gson.version>
+        <gson.version>2.11.0</gson.version>
     </properties>
 </project>
diff --git a/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java 
b/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java
index 6e32a84..9c5bd4a 100644
--- a/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java
+++ b/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java
@@ -435,4 +435,19 @@ public class GSONBuilderService extends AbstractLogEnabled 
implements
         }.init(clazz, filterAttrs);
     }
 
+    @Override
+    public <T> T convertWithFilter(Object src, Class<T> type, String... 
filterAttrs) throws Exception
+    {
+        String json = serializeOnlyFilter(src, filterAttrs);
+        return deSer( json, type );
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T> T convertWithFilter(Object src, String... filterAttrs) throws 
Exception
+    {
+        String json = serializeOnlyFilter(src, filterAttrs);
+        return deSer( json, (Class<T>) src.getClass() );
+    }
+
 }
diff --git a/jackson/pom.xml b/jackson/pom.xml
index 7cf7ce7..4d55184 100644
--- a/jackson/pom.xml
+++ b/jackson/pom.xml
@@ -88,11 +88,10 @@
           <artifactId>jackson-xc</artifactId>
            <version>${jackson.version}</version>
         </dependency>
-        <dependency>
+       <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-nop</artifactId>
-            <version>2.0.7</version>
-            <optional>true</optional>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.7.36</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/jackson2/pom.xml b/jackson2/pom.xml
index c0643c7..76bb26e 100644
--- a/jackson2/pom.xml
+++ b/jackson2/pom.xml
@@ -75,7 +75,7 @@
         <dependency>
             <groupId>org.apache.fulcrum</groupId>
             <artifactId>fulcrum-yaafi</artifactId>
-            <version>2.0.0</version>
+            <version>2.0.1-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -134,8 +134,8 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-nop</artifactId>
-            <version>2.0.7</version>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.7.36</version>
             <optional>true</optional>
             <scope>test</scope>
         </dependency>
diff --git 
a/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java 
b/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
index 9b0ed73..d94b26c 100644
--- 
a/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
+++ 
b/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
@@ -66,6 +66,7 @@ import com.fasterxml.jackson.databind.ser.PropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 
+
 /**
  * 
  * 
@@ -192,6 +193,36 @@ public class Jackson2MapperService extends 
AbstractLogEnabled implements JsonSer
     public <T> T deSer(Object src, Class<T> type) {
         return mapper.convertValue(src, type);
     }
+    
+    public <T> T convert(Object src, Class<T> type) {
+        T filteredObject = mapper.convertValue( src, type );
+        return filteredObject;
+    }
+    
+    @Override
+    @SuppressWarnings("unchecked")
+    public <T> T convertWithFilter(Object src, String... filterAttrs) throws 
Exception {
+        return convertWithFilter(src, (Class<T>) src.getClass(), filterAttrs);
+    }
+    
+    @Override
+    public <T> T convertWithFilter(Object src, Class<T> type, String... 
filterAttrs) throws Exception {
+        if (filterAttrs != null && filterAttrs.length > 0 && 
!"".equals(filterAttrs[0])) {
+            PropertyFilter pf = 
SimpleBeanPropertyFilter.filterOutAllExcept(filterAttrs);
+            SimpleFilterProvider filter = null;
+            if (pf != null) {
+                filter = new SimpleFilterProvider();
+                filter.setDefaultFilter(pf);
+                getMapper().setFilterProvider( filter );
+            }
+            String json = ser( src, filter );
+            T filteredObject = (T) deSer( json, type );
+            getLogger().debug( "filtered Object: " + filteredObject );
+            return filteredObject;
+        } else {
+            return null;
+        }
+    }
 
     /**
      * Add a named module or a {@link Module}.
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 d3cc709..7460c87 100644
--- a/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
+++ b/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperTest.java
@@ -47,6 +47,9 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import com.fasterxml.jackson.databind.ser.PropertyFilter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
 
 /**
@@ -80,6 +83,22 @@ public class JacksonMapperTest extends BaseUnit5Test {
         Object deson = sc.deSer(serJson, TestClass.class);
         assertEquals(TestClass.class, deson.getClass(), "DeSer failed ");
     }
+    @Test
+    public void testConvertWithFilteredpropsMixin() throws Exception {
+        Rectangle rectangle = new Rectangle(5, 10);
+        rectangle.setName("jim");
+        
+        String[] filterAttrs = new String[]{"name"};
+        Rectangle filteredRectangle = 
((Jackson2MapperService)sc).convertWithFilter(rectangle, Rectangle.class, 
filterAttrs);
+        System.out.println( "1 filteredRectangle: "+ filteredRectangle );
+        assertTrue( filteredRectangle.getName() != null );
+        assertTrue( filteredRectangle.getName().equals( "jim" ) );
+        // example with default from src.getClass()
+        filteredRectangle = 
((Jackson2MapperService)sc).convertWithFilter(rectangle, "h","w","size");
+        System.out.println( "2 filteredRectangle: "+ filteredRectangle );
+        assertTrue( filteredRectangle.getName() == null );
+    }
+    
     @Test
     public void testSerializeDateWithDefaultDateFormat() throws Exception {
         Map<String, Date> map = new HashMap<>();
diff --git 
a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Rectangle.java 
b/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Rectangle.java
index 641427d..58c9388 100644
--- a/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Rectangle.java
+++ b/jackson2/src/test/org/apache/fulcrum/json/jackson/example/Rectangle.java
@@ -55,4 +55,11 @@ public final class Rectangle {
     public void setName(String name) {
         this.name = name;
     }
+    
+    @Override
+    public String toString()
+    {
+        return "Rectangle=[ name:" + getName() + ", w:"+ getW()+ ", h:"+ 
getH()+ ", size:"+ getSize() + " ]";
+
+    }
 }
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 03061e7..2d09486 100644
--- a/pom.xml
+++ b/pom.xml
@@ -141,7 +141,7 @@
            <dependency>
               <groupId>org.apache.fulcrum</groupId>
               <artifactId>fulcrum-testcontainer</artifactId>
-              <version>2.0.0</version>
+              <version>2.0.1-SNAPSHOT</version>
               <scope>test</scope>
             </dependency>
              <!-- Log4j2 should be used by default, removed optional -->
@@ -160,7 +160,7 @@
             <dependency>
                 <groupId>org.junit.platform</groupId>
                 <artifactId>junit-platform-runner</artifactId>
-                <version>1.9.3</version>
+                <version>1.11.0-M2</version>
                 <scope>test</scope>
             </dependency>
         </dependencies>
@@ -179,6 +179,11 @@
                 <groupId>org.junit.platform</groupId>
                 <artifactId>junit-platform-runner</artifactId>
             </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter</artifactId>
+                <version>5.11.0-M2</version>
+            </dependency>
         </dependencies>
      
     <properties>

Reply via email to