This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new fcdd26e2 minor fixes in reflection usage for JSON-B polymorphism (no 
functional change except complete meta support)
fcdd26e2 is described below

commit fcdd26e2dcbdba51ef08d83f5a2c6606b12686f3
Author: Romain Manni-Bucau <rmannibu...@gmail.com>
AuthorDate: Thu Apr 20 14:13:38 2023 +0200

    minor fixes in reflection usage for JSON-B polymorphism (no functional 
change except complete meta support)
---
 johnzon-distribution/pom.xml                       | 10 ++--
 .../polymorphism/JsonbPolymorphismHandler.java     | 53 ++++++++++++----------
 .../polymorphism/JsonbPolymorphismTypeInfo.java    |  4 +-
 pom.xml                                            |  4 +-
 4 files changed, 36 insertions(+), 35 deletions(-)

diff --git a/johnzon-distribution/pom.xml b/johnzon-distribution/pom.xml
index 69576e2b..e77d1ee5 100644
--- a/johnzon-distribution/pom.xml
+++ b/johnzon-distribution/pom.xml
@@ -161,7 +161,9 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.4.2</version>
         <executions>
           <execution>
             <id>source-assembly</id>
@@ -203,14 +205,8 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>default-jar</id>
-            <phase />
-          </execution>
-        </executions>
         <configuration>
-          <skip>true</skip>
+          <skipIfEmpty>false</skipIfEmpty>
         </configuration>
       </plugin>
       <plugin>
diff --git 
a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismHandler.java
 
b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismHandler.java
index 5710ed0b..36f1aed5 100644
--- 
a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismHandler.java
+++ 
b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismHandler.java
@@ -26,6 +26,8 @@ import jakarta.json.JsonValue;
 import jakarta.json.bind.JsonbException;
 import jakarta.json.bind.annotation.JsonbSubtype;
 import jakarta.json.bind.annotation.JsonbTypeInfo;
+
+import java.lang.reflect.AnnotatedElement;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -36,7 +38,7 @@ public class JsonbPolymorphismHandler {
     private final Map<Class<?>, JsonbPolymorphismTypeInfo> typeInfoCache = new 
HashMap<>();
 
     public boolean hasPolymorphism(Class<?> clazz) {
-        return clazz.isAnnotationPresent(JsonbTypeInfo.class) || 
getParentWithTypeInfo(clazz) != null;
+        return Meta.getAnnotation((AnnotatedElement) clazz, 
JsonbTypeInfo.class) != null || getParentWithTypeInfo(clazz) != null;
     }
 
     public Map.Entry<String, String>[] 
getPolymorphismPropertiesToSerialize(Class<?> clazz, Collection<String> 
otherProperties) {
@@ -47,8 +49,8 @@ public class JsonbPolymorphismHandler {
             // Only try to resolve types when there's a JsonbTypeInfo 
Annotation present on the current type, Meta.getAnnotation tries to
             // walk up parents by itself until it finds the given Annotation 
and could incorrectly cause JsonbExceptions to be thrown
             // (multiple JsonbTypeInfos with same key found even if thats not 
actually the case)
-            if (current.isAnnotationPresent(JsonbTypeInfo.class)) {
-                JsonbTypeInfo typeInfo = Meta.getAnnotation(current, 
JsonbTypeInfo.class);
+            JsonbTypeInfo typeInfo = Meta.getAnnotation((AnnotatedElement) 
current, JsonbTypeInfo.class);
+            if (typeInfo != null) {
                 if (otherProperties.contains(typeInfo.key())) {
                     throw new JsonbException("JsonbTypeInfo key '" + 
typeInfo.key() + "' collides with other properties in json");
                 }
@@ -76,34 +78,38 @@ public class JsonbPolymorphismHandler {
     }
 
     public Class<?> getTypeToDeserialize(JsonObject jsonObject, Class<?> 
clazz) {
-        if (!typeInfoCache.containsKey(clazz)) {
+        JsonbPolymorphismTypeInfo typeInfo = typeInfoCache.get(clazz);
+        if (typeInfo == null) {
             return clazz;
         }
 
-        JsonbPolymorphismTypeInfo typeInfo = typeInfoCache.get(clazz);
-        if (!jsonObject.containsKey(typeInfo.getTypeKey())) {
+        JsonValue typeValue = jsonObject.get(typeInfo.getTypeKey());
+        if (typeValue == null) {
             return clazz;
         }
 
-        JsonValue typeValue = jsonObject.get(typeInfo.getTypeKey());
         if (typeValue.getValueType() != JsonValue.ValueType.STRING) {
             throw new JsonbException("Property '" + typeInfo.getTypeKey() + "' 
isn't a String, resolving JsonbSubtype is impossible");
         }
 
         String typeValueString = ((JsonString) typeValue).getString();
-        if (!typeInfo.getAliases().containsKey(typeValueString)) {
+        final Class<?> result = typeInfo.getAliases().get(typeValueString);
+        if (result == null) {
             throw new JsonbException("No JsonbSubtype found for alias '" + 
typeValueString + "' on " + clazz.getName());
         }
 
-        return typeInfo.getAliases().get(typeValueString);
+        return result;
     }
 
     public void populateTypeInfoCache(Class<?> clazz) {
-        if (typeInfoCache.containsKey(clazz) || 
!clazz.isAnnotationPresent(JsonbTypeInfo.class)) {
+        if (typeInfoCache.containsKey(clazz)) {
             return;
         }
 
-        typeInfoCache.put(clazz, new 
JsonbPolymorphismTypeInfo(Meta.getAnnotation(clazz, JsonbTypeInfo.class)));
+        final JsonbTypeInfo annotation = Meta.getAnnotation((AnnotatedElement) 
clazz, JsonbTypeInfo.class);
+        if (annotation != null) {
+            typeInfoCache.put(clazz, new 
JsonbPolymorphismTypeInfo(annotation));
+        }
     }
 
     /**
@@ -126,11 +132,11 @@ public class JsonbPolymorphismHandler {
      * @throws JsonbException validation failed
      */
     protected void validateSubtypeCompatibility(Class<?> classToValidate) {
-        if (!classToValidate.isAnnotationPresent(JsonbTypeInfo.class)) {
+        JsonbTypeInfo typeInfo = Meta.getAnnotation((AnnotatedElement) 
classToValidate, JsonbTypeInfo.class);
+        if (typeInfo == null) {
             return;
         }
 
-        JsonbTypeInfo typeInfo = Meta.getAnnotation(classToValidate, 
JsonbTypeInfo.class);
         for (JsonbSubtype subtype : typeInfo.value()) {
             if (!classToValidate.isAssignableFrom(subtype.type())) {
                 throw new JsonbException("JsonbSubtype '" + subtype.alias() + 
"'" +
@@ -146,10 +152,10 @@ public class JsonbPolymorphismHandler {
      * @throws JsonbException validation failed
      */
     protected void validateOnlyOneParentWithTypeInfo(Class<?> classToValidate) 
{
-        boolean found = classToValidate.getSuperclass() != null && 
Meta.getAnnotation(classToValidate.getSuperclass(), JsonbTypeInfo.class) != 
null;
+        boolean found = classToValidate.getSuperclass() != null && 
Meta.getAnnotation((AnnotatedElement) classToValidate.getSuperclass(), 
JsonbTypeInfo.class) != null;
 
         for (Class<?> iface : classToValidate.getInterfaces()) {
-            if (iface != null && Meta.getAnnotation(iface, 
JsonbTypeInfo.class) != null) {
+            if (iface != null && Meta.getAnnotation((AnnotatedElement) iface, 
JsonbTypeInfo.class) != null) {
                 if (found) {
                     throw new JsonbException("More than one 
interface/superclass of " + classToValidate.getName() +
                             " has JsonbTypeInfo Annotation");
@@ -172,15 +178,14 @@ public class JsonbPolymorphismHandler {
 
         Class<?> current = classToValidate;
         while (current != null) {
-            if (current.isAnnotationPresent(JsonbTypeInfo.class)) {
-                String key = Meta.getAnnotation(current, 
JsonbTypeInfo.class).key();
-
-                if (keyToDefiningClass.containsKey(key)) {
+            final JsonbTypeInfo annotation = 
Meta.getAnnotation((AnnotatedElement) current, JsonbTypeInfo.class);
+            if (annotation != null) {
+                String key = annotation.key();
+                final Class<?> existing = keyToDefiningClass.put(key, current);
+                if (existing != null) {
                     throw new JsonbException("JsonbTypeInfo key '" + key + "' 
found more than once in type hierarchy of " + classToValidate
-                    + " (first defined in " + 
keyToDefiningClass.get(key).getName() + ", then defined again in " + 
current.getName() + ")");
+                            + " (first defined in " + existing.getName() + ", 
then defined again in " + current.getName() + ")");
                 }
-
-                keyToDefiningClass.put(key, current);
             }
 
             current = getParentWithTypeInfo(current);
@@ -188,12 +193,12 @@ public class JsonbPolymorphismHandler {
     }
 
     protected Class<?> getParentWithTypeInfo(Class<?> clazz) {
-        if (clazz.getSuperclass() != null && 
Meta.getAnnotation(clazz.getSuperclass(), JsonbTypeInfo.class) != null) {
+        if (clazz.getSuperclass() != null && 
Meta.getAnnotation((AnnotatedElement) clazz.getSuperclass(), 
JsonbTypeInfo.class) != null) {
             return clazz.getSuperclass();
         }
 
         for (Class<?> iface : clazz.getInterfaces()) {
-            if (Meta.getAnnotation(iface, JsonbTypeInfo.class) != null) {
+            if (Meta.getAnnotation((AnnotatedElement) iface, 
JsonbTypeInfo.class) != null) {
                 return iface;
             }
         }
diff --git 
a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTypeInfo.java
 
b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTypeInfo.java
index 7fa7dd85..15f5c71b 100644
--- 
a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTypeInfo.java
+++ 
b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTypeInfo.java
@@ -24,8 +24,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 public class JsonbPolymorphismTypeInfo {
-    private String typeKey;
-    private Map<String, Class<?>> aliases;
+    private final String typeKey;
+    private final Map<String, Class<?>> aliases;
 
     protected JsonbPolymorphismTypeInfo(JsonbTypeInfo annotation) {
         this.typeKey = annotation.key();
diff --git a/pom.xml b/pom.xml
index 4647826d..ddd642ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
-    <version>27</version>
+    <version>29</version>
   </parent>
 
   <groupId>org.apache.johnzon</groupId>
@@ -133,7 +133,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
-          <version>3.0.0-M7</version>
+          <version>3.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>

Reply via email to