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

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git


The following commit(s) were added to refs/heads/main by this push:
     new 3348074f4 fix(java): Better ergonomics for AllowListChecker (#3061)
3348074f4 is described below

commit 3348074f44bd2d83497ca5bfe491f063710327a0
Author: Asuka-star <[email protected]>
AuthorDate: Fri Dec 19 21:33:46 2025 +0800

    fix(java): Better ergonomics for AllowListChecker (#3061)
    
    ## Why?
    
    
    
    ## What does this PR do?
    
    
    解决`setClassChecker/setTypeChecker`之后依旧打印错误日志
    `setClassChecker`之后自动添加监听器
    
    ## Related issues
    #3050
    
    
    ## Does this PR introduce any user-facing change?
    
    
    
    - [x] Does this PR introduce any public API change?
    - [ ] Does this PR introduce any binary protocol compatibility change?
    
    ## Benchmark
---
 .../src/main/java/org/apache/fory/resolver/ClassResolver.java      | 6 +++++-
 .../src/main/java/org/apache/fory/resolver/TypeResolver.java       | 7 ++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git 
a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java 
b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
index fbc0a261c..3b87c6611 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
@@ -1207,6 +1207,9 @@ public class ClassResolver extends TypeResolver {
           }
           return false;
         };
+    if (classChecker instanceof AllowListChecker) {
+      ((AllowListChecker) classChecker).addListener(this);
+    }
   }
 
   @Override
@@ -1335,7 +1338,8 @@ public class ClassResolver extends TypeResolver {
           && !Functions.isLambda(cls)
           && !ReflectionUtils.isJdkProxy(cls)
           && !extRegistry.registeredClassIdMap.containsKey(cls)
-          && !shimDispatcher.contains(cls)) {
+          && !shimDispatcher.contains(cls)
+          && !extRegistry.isTypeCheckerSet()) {
         LOG.warn(generateSecurityMsg(cls));
       }
     }
diff --git 
a/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java 
b/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
index 27fa633cf..24ccfc8a2 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
@@ -713,12 +713,17 @@ public abstract class TypeResolver {
     // TODO(chaokunyang) Better to  use soft reference, see ObjectStreamClass.
     final ConcurrentHashMap<Tuple2<Class<?>, Boolean>, SortedMap<Member, 
Descriptor>>
         descriptorsCache = new ConcurrentHashMap<>();
-    TypeChecker typeChecker = (resolver, className) -> true;
+    static final TypeChecker DEFAULT_TYPE_CHECKER = (resolver, className) -> 
true;
+    TypeChecker typeChecker = DEFAULT_TYPE_CHECKER;
     GenericType objectGenericType;
     final IdentityMap<Type, GenericType> genericTypes = new IdentityMap<>();
     final Map<Class, Map<String, GenericType>> classGenericTypes = new 
HashMap<>();
     final Map<List<ClassLoader>, CodeGenerator> codeGeneratorMap = new 
HashMap<>();
     final Set<ClassInfo> registeredClassInfos = new HashSet<>();
     boolean ensureSerializersCompiled;
+
+    public boolean isTypeCheckerSet() {
+      return typeChecker != DEFAULT_TYPE_CHECKER;
+    }
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to