From 32e6aee7172744b6138341fe5268899eaef51efa Mon Sep 17 00:00:00 2001 From: Naveed Khan Date: Tue, 7 Jul 2026 13:42:31 +0530 Subject: [PATCH] suppress class and declaringClass properties in BeanMap BeanMap.initialize introspected the bean directly and registered the class/declaringClass pseudo-properties, so BeanMap.get("class") returned the bean's class loader that PropertyUtilsBean suppresses by default. Skip both names during initialization. --- .../apache/commons/beanutils2/BeanMap.java | 5 ++++ .../commons/beanutils2/BeanMapTest.java | 30 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/apache/commons/beanutils2/BeanMap.java b/src/main/java/org/apache/commons/beanutils2/BeanMap.java index 927573c2e..4c0d2cd3b 100644 --- a/src/main/java/org/apache/commons/beanutils2/BeanMap.java +++ b/src/main/java/org/apache/commons/beanutils2/BeanMap.java @@ -479,6 +479,11 @@ private void initialize() { for (final PropertyDescriptor propertyDescriptor : propertyDescriptors) { if (propertyDescriptor != null) { final String name = propertyDescriptor.getName(); + if ("class".equals(name) || "declaringClass".equals(name)) { + // These pseudo-properties expose the bean's ClassLoader; skip them to match the + // suppression PropertyUtilsBean applies by default (see SuppressPropertiesBeanIntrospector). + continue; + } final Method readMethod = propertyDescriptor.getReadMethod(); final Method writeMethod = propertyDescriptor.getWriteMethod(); final Class aType = propertyDescriptor.getPropertyType(); diff --git a/src/test/java/org/apache/commons/beanutils2/BeanMapTest.java b/src/test/java/org/apache/commons/beanutils2/BeanMapTest.java index 6604cfe12..2a8017517 100644 --- a/src/test/java/org/apache/commons/beanutils2/BeanMapTest.java +++ b/src/test/java/org/apache/commons/beanutils2/BeanMapTest.java @@ -17,7 +17,9 @@ package org.apache.commons.beanutils2; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import static org.junit.jupiter.api.Assumptions.assumeFalse; @@ -176,7 +178,7 @@ protected Object computeIfAbsent(final String key, final Function