From 86e89d53a914ee5bd645e8214db648e9dbc7f8f2 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 17 Dec 2025 14:30:44 +0100 Subject: [PATCH] Do not attempt nested PropertyHandler resolution for argument conversion Includes fix for return type declaration in PropertyAccessor subclasses. See gh-36024 --- .../beans/AbstractNestablePropertyAccessor.java | 3 +++ .../main/java/org/springframework/beans/BeanWrapperImpl.java | 2 +- .../java/org/springframework/beans/DirectFieldAccessor.java | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java index d37d0e1d973..d4675d2c032 100644 --- a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java @@ -485,6 +485,9 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA @Override public @Nullable Class getPropertyType(String propertyName) throws BeansException { + if (this.wrappedObject == null) { + return null; + } try { PropertyHandler ph = getPropertyHandler(propertyName); if (ph != null) { diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java b/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java index 02c4c9e45fa..09cb89f49b2 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java @@ -189,7 +189,7 @@ public class BeanWrapperImpl extends AbstractNestablePropertyAccessor implements } @Override - protected @Nullable BeanPropertyHandler getLocalPropertyHandler(String propertyName) { + protected @Nullable PropertyHandler getLocalPropertyHandler(String propertyName) { PropertyDescriptor pd = getCachedIntrospectionResults().getPropertyDescriptor(propertyName); return (pd != null ? new BeanPropertyHandler((GenericTypeAwarePropertyDescriptor) pd) : null); } diff --git a/spring-beans/src/main/java/org/springframework/beans/DirectFieldAccessor.java b/spring-beans/src/main/java/org/springframework/beans/DirectFieldAccessor.java index c847437b72c..99f39bcf37a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/DirectFieldAccessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/DirectFieldAccessor.java @@ -73,7 +73,7 @@ public class DirectFieldAccessor extends AbstractNestablePropertyAccessor { @Override - protected @Nullable FieldPropertyHandler getLocalPropertyHandler(String propertyName) { + protected @Nullable PropertyHandler getLocalPropertyHandler(String propertyName) { FieldPropertyHandler propertyHandler = this.fieldMap.get(propertyName); if (propertyHandler == null) { Field field = ReflectionUtils.findField(getWrappedClass(), propertyName);