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>